[Unicode]   Common Locale Data Repository : Bug Tracking Home | Site Map | Search
 

Ticket #6791: globe.patch

File globe.patch, 15.8 KB (added by srl, 5 years ago)
  • src/org/unicode/jsp/Globe.java

     
    5353import javax.swing.JPanel; 
    5454import javax.swing.JScrollPane; 
    5555 
    56 import com.sun.image.codec.jpeg.JPEGCodec; 
    57 import com.sun.image.codec.jpeg.JPEGEncodeParam; 
    58 import com.sun.image.codec.jpeg.JPEGImageEncoder; 
     56import javax.imageio.ImageIO; 
    5957 
    6058public class Globe { 
    6159  public static final boolean DEBUG = false; 
     
    8280  static int originChoice = 0; 
    8381  static String[] originList = new String[] { 
    8482    "?", 
    85     "North Pole",  
     83    "North Pole", 
    8684    "San Francisco (SFO)", 
    8785    "Zürich (ZRH)", 
    88     "Tokyo (NRT)",  
    89     "Wellington (WLG)",  
     86    "Tokyo (NRT)", 
     87    "Wellington (WLG)", 
    9088    "Honolulu", 
    9189    "Melbourne (MEL)", 
    9290    "Caen (CFR)", 
     
    103101  static double[][] origins = { // lat, long 
    104102    {-Math.PI/2 + 0.0001, 0.0001}, // 
    105103    {-Math.PI/2 + 0.0001, 0.0001}, // 
    106     {Navigator.toRadians(37.0, 37.0, 8.3, false), Navigator.toRadians(122.0, 22.0, 29.6, false)}, // sf //  
    107     {Navigator.toRadians(47, 27, 0, false), Navigator.toRadians(8.0, 33.0, 0, true)}, // zurich //  
    108     {Navigator.toRadians(35, 45, 50, false), Navigator.toRadians(140.0, 23.0, 30, true)}, // Narita 35°45´50"N 140°23´30"E  
    109     {Navigator.toRadians(41, 20, 0, true), Navigator.toRadians(174.0, 48.0, 0, true)}, // Wellington 41° 20' 0" S 174° 48' 0" E   
    110     {Navigator.toRadians(21, 18, 0, false), Navigator.toRadians(157, 50, 0, false)},    
    111     {Navigator.toRadians(37, 39, 42, true), Navigator.toRadians(144, 50, 0, true)},    
    112     {Navigator.toRadians(49, 10, 24, false), Navigator.toRadians(0, 26, 53, false)},    
     104    {Navigator.toRadians(37.0, 37.0, 8.3, false), Navigator.toRadians(122.0, 22.0, 29.6, false)}, // sf // 
     105    {Navigator.toRadians(47, 27, 0, false), Navigator.toRadians(8.0, 33.0, 0, true)}, // zurich // 
     106    {Navigator.toRadians(35, 45, 50, false), Navigator.toRadians(140.0, 23.0, 30, true)}, // Narita 35°45´50"N 140°23´30"E 
     107    {Navigator.toRadians(41, 20, 0, true), Navigator.toRadians(174.0, 48.0, 0, true)}, // Wellington 41° 20' 0" S 174° 48' 0" E 
     108    {Navigator.toRadians(21, 18, 0, false), Navigator.toRadians(157, 50, 0, false)}, 
     109    {Navigator.toRadians(37, 39, 42, true), Navigator.toRadians(144, 50, 0, true)}, 
     110    {Navigator.toRadians(49, 10, 24, false), Navigator.toRadians(0, 26, 53, false)}, 
    113111    {Navigator.toRadians(10, 9, 7, false), Navigator.toRadians(76, 24, 7, true)},   // Cochin 
    114112    {Navigator.toRadians(0, 0, 0, false), Navigator.toRadians(70, 0, 0, true)},   // Cochin 
    115113    {Navigator.toRadians(46.743978, 0, 0, false), Navigator.toRadians(116.904176, 0, 0, false)},   // Moscow 
     
    204202    //Add the ubiquitous "Hello World" label. 
    205203    //JLabel label = new JLabel("Hello World"); 
    206204    //frame.getContentPane().add(label); 
    207     String sname = SOURCE_DIR + "earth-living.jpg";  
     205    String sname = SOURCE_DIR + "earth-living.jpg"; 
    208206    //"ev11656_land_shallow_topo_8192.tiff"; 
    209207    //"ev11656_land_shallow_topo_8192.PNG"; 
    210208    //earthmap1k.jpg"; 
     
    327325            changeImage(frame); 
    328326          } else { 
    329327            addGrid(transformedImage, projectionValues[projectionChoice]); 
    330             //  
     328            // 
    331329          } 
    332330        } 
    333331      } 
     
    463461      System.out.println("Changing Icon1"); 
    464462    } 
    465463    // System.out.println("Width " + ii.getIconWidth() + ", Height: " + ii.getIconHeight()); 
    466     DeformFilter filter = new DeformFilter(sourceImage.getWidth(),  
    467             sourceImage.getHeight(), sizeValues[sizeChoice][0], sizeValues[sizeChoice][1],  
     464    DeformFilter filter = new DeformFilter(sourceImage.getWidth(), 
     465            sourceImage.getHeight(), sizeValues[sizeChoice][0], sizeValues[sizeChoice][1], 
    468466            projectionValues[projectionChoice]); 
    469467    //ImageFilter filter = new RotateFilter(Math.PI / 4); 
    470468 
     
    505503 
    506504    BufferedReader br = new BufferedReader( 
    507505            new InputStreamReader( 
    508                     new FileInputStream("bin/jsp/Globe.txt"),  
     506                    new FileInputStream("bin/jsp/Globe.txt"), 
    509507            "UTF-8")); 
    510508    //BagFormatter.openUTF8Reader("classes/jsp/", "Globe.txt"); 
    511509    String pat = "([^;]+) \\s* [;] \\s* " 
     
    528526        continue; 
    529527      } 
    530528      nameData.add(m.group(1)); 
    531       double latitude = Navigator.toRadians(Double.parseDouble(m.group(2)),  
    532               m.group(3) != null ? Double.parseDouble(m.group(3)) : 0,  
    533                       m.group(4) != null ? Double.parseDouble(m.group(4)) : 0,  
     529      double latitude = Navigator.toRadians(Double.parseDouble(m.group(2)), 
     530              m.group(3) != null ? Double.parseDouble(m.group(3)) : 0, 
     531                      m.group(4) != null ? Double.parseDouble(m.group(4)) : 0, 
    534532                              m.group(5).equalsIgnoreCase("S")); 
    535       double longitude = Navigator.toRadians(Double.parseDouble(m.group(6)),  
    536               m.group(7) != null ? Double.parseDouble(m.group(7)) : 0,  
    537                       m.group(8) != null ? Double.parseDouble(m.group(8)) : 0,  
     533      double longitude = Navigator.toRadians(Double.parseDouble(m.group(6)), 
     534              m.group(7) != null ? Double.parseDouble(m.group(7)) : 0, 
     535                      m.group(8) != null ? Double.parseDouble(m.group(8)) : 0, 
    538536                              m.group(9).equalsIgnoreCase("E")); 
    539537      posData.add(new double[] {latitude, longitude}); 
    540538      System.out.println(m.group(1) + ", " + latitude + ", " + longitude); 
     
    605603      p[2] = c; 
    606604      p[3] = d; 
    607605      // sort; so y's are now in sorted order 
    608       Arrays.sort(p);             
     606      Arrays.sort(p); 
    609607      // integer bounding rectangle 
    610608      // is easy for y's 
    611609      containing.y0 = (int)Math.floor(p[0].y); 
    612       containing.y1 = (int)Math.ceil(p[3].y);   
     610      containing.y1 = (int)Math.ceil(p[3].y); 
    613611      // but for x's we have to compute 
    614612      containing.x0 = (int)Math.floor(Math.min(p[0].x, Math.min(p[1].x, Math.min(p[2].x, p[3].x)))); 
    615613      containing.x1 = (int)Math.ceil(Math.max(p[0].x, Math.max(p[1].x, Math.max(p[2].x, p[3].x)))); 
     
    622620              && containing.y0 <= y && y < containing.y1) { 
    623621        return 1.0; 
    624622      } 
    625       return 0;            
     623      return 0; 
    626624    } 
    627625  } 
    628626 
     
    662660      navigator = new Navigator().setLat1Lon1(originLat, originLong); 
    663661      clip = null; 
    664662      return this; 
    665     }       
     663    } 
    666664    // Remember that the coordinate system is upside down so apply 
    667665    // the transform as if the angle were negated. 
    668666    // cos(-angle) =  cos(angle) 
     
    686684      } 
    687685      _transform(retcoord); 
    688686      retcoord.x = long_dstW.map(retcoord.x); 
    689       retcoord.y = lat_dstH.map(retcoord.y);    
     687      retcoord.y = lat_dstH.map(retcoord.y); 
    690688      return retcoord.x >= 0.0 && retcoord.x <= dstW && retcoord.y >= 0 && retcoord.y <= dstH; 
    691689    } 
    692690    // Remember that the coordinate system is upside down so apply 
     
    708706        //System.out.println("lat: " + Navigator.degrees(retcoord.y) + ", lon:" + Navigator.degrees(retcoord.x)); 
    709707      } 
    710708      retcoord.x = srcW_long.back(retcoord.x); 
    711       retcoord.y = srcH_lat.back(retcoord.y);            
     709      retcoord.y = srcH_lat.back(retcoord.y); 
    712710      return retcoord.x >= 0.0 && retcoord.x <= srcW && retcoord.y >= 0 && retcoord.y <= srcH; 
    713711    } 
    714712    /** 
     
    771769              double x3 = retcoord.x; 
    772770              double y3 = retcoord.y; 
    773771              if (Math.abs(x - x3) > 0.001 || Math.abs(y - y3) > 0.001) { 
    774                 System.out.println("Error: " + counter + "\t" + x + ", " + y  
    775                         + " => "  + x2 + ", " + y2  
    776                         + " => "  + x3 + ", " + y3  
     772                System.out.println("Error: " + counter + "\t" + x + ", " + y 
     773                        + " => "  + x2 + ", " + y2 
     774                        + " => "  + x3 + ", " + y3 
    777775                ); 
    778776              } 
    779777            } 
    780778          } 
    781779        } 
    782         System.out.println("\t minX " + minX  
     780        System.out.println("\t minX " + minX 
    783781                + ",\t maxX " + maxX 
    784782                + ",\t minY " + minY 
    785783                + ",\t maxY " + maxY 
    786784        ); 
    787785      } 
    788     }         
     786    } 
    789787  } 
    790788 
    791789  static public class TransformPlateCarree extends Transform { 
     
    852850      } 
    853851    } 
    854852    public void _itransform(DPoint retcoord) { 
    855       retcoord.x *= 2;  
     853      retcoord.x *= 2; 
    856854      if (retcoord.x < 0) { 
    857855        retcoord.x += Math.PI; 
    858856        retcoord.y = Math.asin(retcoord.y / (Math.PI/2)) ; 
     
    960958        if (debugTemp) { 
    961959          System.out.println("newGuess: " + guess); 
    962960        } 
    963       }  
     961      } 
    964962    } 
    965963  } 
    966964 
     
    11801178          // other is zero 
    11811179        } else { 
    11821180          mainProportion = (1 - lightness); // 0 = 1, 1 = 0 
    1183           otherProportion = 0xFF * (1 - mainProportion);                    
     1181          otherProportion = 0xFF * (1 - mainProportion); 
    11841182        } 
    11851183      } 
    11861184      boolean[] topOk = new boolean[dstW]; 
     
    12151213                        int i = (int)Math.round(coord00.x); 
    12161214                        int j = (int)Math.round(coord00.y); 
    12171215                        if (i < 0 || j < 0 || i >= srcW || j >= srcH) { 
    1218                             pixels[dx] = 0;    
     1216                            pixels[dx] = 0; 
    12191217                        } else { 
    12201218                            pixels[dx] = raster[j * srcW + i]; 
    12211219                        } 
     
    12781276            a = mainProportion*a + otherProportion; 
    12791277          } 
    12801278 
    1281           pixels[dx] =  
     1279          pixels[dx] = 
    12821280            ((int)Math.max(0, Math.min(0xFF, Math.round(a))) << 24) | 
    12831281            ((int)Math.max(0, Math.min(0xFF, Math.round(r))) << 16) | 
    12841282            ((int)Math.max(0, Math.min(0xFF, Math.round(g))) << 8) | 
     
    15591557      double dInc = Math.PI / increment; 
    15601558      //double dInc2 = dInc/grain; 
    15611559      int distLimit = increment - 1; 
    1562       int angleLimit =  2 * increment - 1;  
     1560      int angleLimit =  2 * increment - 1; 
    15631561      int halfAngle = increment; 
    15641562 
    15651563      /* 
     
    17951793      } 
    17961794    } 
    17971795 
    1798     void add(Transform trans, double longitude, double latitude, String s) {                     
     1796    void add(Transform trans, double longitude, double latitude, String s) { 
    17991797      double xx = trans.srcW_long.back(longitude); 
    18001798      double yy = trans.srcH_lat.back(latitude); 
    18011799      trans.transform(xx, yy, drawLineP1); 
     
    18751873   * @param latitude 
    18761874   * @return 
    18771875   */ 
    1878   private static void drawPoint(Graphics2D graphics2D, Transform trans, Color fill, Color line,  
     1876  private static void drawPoint(Graphics2D graphics2D, Transform trans, Color fill, Color line, 
    18791877          double longitude, double latitude, String label) { 
    18801878    double xx = trans.srcW_long.back(longitude); 
    18811879    double yy = trans.srcH_lat.back(latitude); 
     
    19051903     */ 
    19061904  } 
    19071905 
    1908   private static void drawPoint(Graphics2D graphics2D, Transform trans, Color fill, Color line,  
     1906  private static void drawPoint(Graphics2D graphics2D, Transform trans, Color fill, Color line, 
    19091907          double longitude, double latitude) { 
    1910     drawPoint(graphics2D,  trans,  fill,  line,  
     1908    drawPoint(graphics2D,  trans,  fill,  line, 
    19111909            longitude,  latitude, null); 
    19121910  } 
    19131911 
     
    19391937                // skip, don't care about opposite corners 
    19401938                System.out.println("Skipping opposite corners"); 
    19411939            } else { 
    1942                 if (x1 < x2) {   
     1940                if (x1 < x2) { 
    19431941                    drawLine2(graphics2D, trans, x1, y1, x2 - trans.srcW, y2); 
    19441942                    drawLine2(graphics2D, trans, x1 + trans.srcW, y1, x2, y2); 
    19451943                } else { 
     
    19481946                } 
    19491947            } 
    19501948        } else if (yDist > trans.srcH/2) { 
    1951             if (y1 < y2) {   
     1949            if (y1 < y2) { 
    19521950                drawLine2(graphics2D, trans, x1, y1, x2, y2 - trans.srcH); 
    19531951                drawLine2(graphics2D, trans, x1, y1 + trans.srcH, x2, y2); 
    19541952            } else { 
     
    19551953                drawLine2(graphics2D, trans, x1, y1, x2, y2 + trans.srcH); 
    19561954                drawLine2(graphics2D, trans, x1, y1 - trans.srcH, x2, y2); 
    19571955            } 
    1958         } else {            
     1956        } else { 
    19591957            drawLine2(graphics2D, trans, x1, y1, x2, y2); 
    19601958        } 
    19611959        } 
     
    20622060          if (maxDepth <= 0) { 
    20632061            return; // skip if too long 
    20642062          } 
    2065           divide = true;   
    2066         }  
     2063          divide = true; 
     2064        } 
    20672065      } 
    20682066      if (divide) { 
    20692067        double midT = (startT + endT)/2; 
     
    20702068        ttransform.transform((startT + endT)/2); 
    20712069        double midX = ttransform.x; // keep, since ttransform gets overridden 
    20722070        double midY = ttransform.y; 
    2073         draw(minDepth - 1, maxDepth - 1, midT, midX, midY);   
    2074         draw(minDepth - 1, maxDepth - 1, endT, endX, endY);    
     2071        draw(minDepth - 1, maxDepth - 1, midT, midX, midY); 
     2072        draw(minDepth - 1, maxDepth - 1, endT, endX, endY); 
    20752073      } else { 
    20762074        //System.out.println("Drawing"); 
    20772075        //segments++; 
    20782076        line.x1 = startX; line.y1 = startY; line.x2 = endX; line.y2 = endY; 
    20792077        graphics2D.draw(line); 
    2080         //graphics2D.drawLine((int) Math.round(startX), (int) Math.round(startY),  
     2078        //graphics2D.drawLine((int) Math.round(startX), (int) Math.round(startY), 
    20812079        //        (int) Math.round(endX), (int) Math.round(endY)); 
    20822080      } 
    20832081      startT = endT; 
     
    20882086 
    20892087  public static void writeImage(BufferedImage image, String filename, float quality) { 
    20902088    try { 
    2091       BufferedOutputStream out = new BufferedOutputStream( 
    2092               new FileOutputStream(filename)); 
    2093       JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
    2094       JPEGEncodeParam param = encoder 
    2095       .getDefaultJPEGEncodeParam(image); 
    2096       quality = Math.max(0, Math.min(quality, 100)); 
    2097       param.setQuality(quality / 100.0f, false); 
    2098       encoder.setJPEGEncodeParam(param); 
    2099       encoder.encode(image); 
    2100       out.close(); 
     2089      ImageIO.write(image, "jpg", new File(filename)); 
     2090      // docs say imageio can handle quality settings. 
     2091      //quality = Math.max(0, Math.min(quality, 100)); 
     2092      //param.setQuality(quality / 100.0f, false); 
    21012093      System.out.println("Saving on: " + new File(filename).getCanonicalPath()); 
    21022094    } catch (Exception e) { 
    21032095      e.printStackTrace(); 
     
    21312123      } 
    21322124      // draw original image to thumbnail image object and 
    21332125      // scale it to the new size on-the-fly 
    2134       BufferedImage thumbImage = new BufferedImage(thumbWidth,  
     2126      BufferedImage thumbImage = new BufferedImage(thumbWidth, 
    21352127              thumbHeight, BufferedImage.TYPE_INT_RGB); 
    21362128      Graphics2D graphics2D = thumbImage.createGraphics(); 
    21372129      graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 
     
    21382130              RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
    21392131      graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); 
    21402132      // save thumbnail image to OUTFILE 
    2141       BufferedOutputStream out = new BufferedOutputStream(new 
    2142               FileOutputStream(args[1])); 
    2143       JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
    2144       JPEGEncodeParam param = encoder. 
    2145       getDefaultJPEGEncodeParam(thumbImage); 
    2146       int quality = Integer.parseInt(args[4]); 
    2147       quality = Math.max(0, Math.min(quality, 100)); 
    2148       param.setQuality((float)quality / 100.0f, false); 
    2149       encoder.setJPEGEncodeParam(param); 
    2150       encoder.encode(thumbImage); 
    2151       out.close();  
     2133      File out = new File(args[1]); 
     2134      ImageIO.write(thumbImage, "jpg", out); 
     2135      // docs say imageio can handle quality settings. 
     2136      // int quality = Integer.parseInt(args[4]); 
     2137      // quality = Math.max(0, Math.min(quality, 100)); 
     2138      // param.setQuality((float)quality / 100.0f, false); 
    21522139      System.out.println("Done."); 
    21532140      System.exit(0); 
    21542141    } 
    21552142  } 
    2156 } 
    2157  No newline at end of file 
     2143}