Changeset 2617 in josm for trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
- Timestamp:
- 2009-12-12T15:09:44+01:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
r2606 r2617 5 5 import static org.openstreetmap.josm.tools.I18n.tr; 6 6 7 import java.awt.MediaTracker;8 7 import java.awt.Graphics2D; 9 8 import java.awt.Image; 9 import java.awt.MediaTracker; 10 import java.awt.Rectangle; 10 11 import java.awt.Toolkit; 11 12 import java.awt.image.BufferedImage; … … 19 20 20 21 public class ThumbsLoader implements Runnable { 22 public static final int maxSize = 120; 23 public static final int minSize = 22; 21 24 volatile boolean stop = false; 22 25 List<ImageEntry> data; 26 GeoImageLayer layer; 23 27 MediaTracker tracker; 24 28 CacheFiles cache; 25 29 boolean cacheOff = Main.pref.getBoolean("geoimage.noThumbnailCache", false); 26 27 public ThumbsLoader(List<ImageEntry> data) { 28 this.data = new ArrayList<ImageEntry>(data); 30 31 public ThumbsLoader(GeoImageLayer layer) { 32 this.layer = layer; 33 this.data = new ArrayList<ImageEntry>(layer.data); 29 34 if (!cacheOff) { 30 35 cache = new CacheFiles("geoimage-thumbnails", false); … … 39 44 for (int i = 0; i < data.size(); i++) { 40 45 if (stop) return; 46 41 47 System.err.print("fetching image "+i); 48 42 49 data.get(i).thumbnail = loadThumb(data.get(i)); 50 43 51 if (Main.map != null && Main.map.mapView != null) { 52 try { 53 layer.updateOffscreenBuffer = true; 54 } catch (Exception e) {} 44 55 Main.map.mapView.repaint(); 45 56 } 46 57 } 47 (new Thread() { 58 try { 59 layer.updateOffscreenBuffer = true; 60 } catch (Exception e) {} 61 Main.map.mapView.repaint(); 62 (new Thread() { // clean up the garbage - shouldn't hurt 48 63 public void run() { 49 64 try { … … 56 71 57 72 } 58 73 59 74 private BufferedImage loadThumb(ImageEntry entry) { 60 final int size = 16; 61 final String cacheIdent = entry.file.toString()+":"+size; 62 75 final String cacheIdent = entry.file.toString()+":"+maxSize; 76 63 77 if (!cacheOff) { 64 78 BufferedImage cached = cache.getImg(cacheIdent); 65 79 if(cached != null) { 66 System.err.println(" from cache"); 80 System.err.println(" from cache"); 67 81 return cached; 68 82 } 69 83 } 70 84 71 85 Image img = Toolkit.getDefaultToolkit().createImage(entry.file.getPath()); 72 86 tracker.addImage(img, 0); … … 77 91 return null; 78 92 } 79 BufferedImage scaledBI = new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB); 93 if (tracker.isErrorID(1) || img.getWidth(null) <= 0 || img.getHeight(null) <= 0) { 94 System.err.println(" Invalid image"); 95 return null; 96 } 97 Rectangle targetSize = ImageDisplay.calculateDrawImageRectangle( 98 new Rectangle(0, 0, img.getWidth(null), img.getHeight(null)), 99 new Rectangle(0, 0, maxSize, maxSize)); 100 BufferedImage scaledBI = new BufferedImage(targetSize.width, targetSize.height, BufferedImage.TYPE_INT_RGB); 80 101 Graphics2D g = scaledBI.createGraphics(); 81 while (!g.drawImage(img, 0, 0, 16, 16, null))102 while (!g.drawImage(img, 0, 0, targetSize.width, targetSize.height, null)) 82 103 { 83 104 try { 84 105 Thread.sleep(10); 85 } catch(InterruptedException ie) {} //FIXME: timeout?106 } catch(InterruptedException ie) {} 86 107 } 87 108 g.dispose(); 88 109 tracker.removeImage(img); 89 90 if (!cacheOff && scaledBI != null && scaledBI.getWidth() > 0) { 110 111 if (scaledBI == null || scaledBI.getWidth() <= 0 || scaledBI.getHeight() <= 0) { 112 System.err.println(" Invalid image"); 113 return null; 114 } 115 116 if (!cacheOff) { 91 117 cache.saveImg(cacheIdent, scaledBI); 92 118 } 93 119 94 120 System.err.println(""); 95 121 return scaledBI;
Note:
See TracChangeset
for help on using the changeset viewer.