source: josm/trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java@ 2986

Last change on this file since 2986 was 2986, checked in by jttt, 14 years ago

Fix some of FindBugs warnings

  • Property svn:eol-style set to native
File size: 3.8 KB
Line 
1// License: GPL. See LICENSE file for details.
2
3package org.openstreetmap.josm.gui.layer.geoimage;
4
5import java.awt.Graphics2D;
6import java.awt.Image;
7import java.awt.MediaTracker;
8import java.awt.Rectangle;
9import java.awt.Toolkit;
10import java.awt.image.BufferedImage;
11import java.util.ArrayList;
12import java.util.List;
13
14import org.openstreetmap.josm.Main;
15import org.openstreetmap.josm.io.CacheFiles;
16
17public class ThumbsLoader implements Runnable {
18 public static final int maxSize = 120;
19 public static final int minSize = 22;
20 volatile boolean stop = false;
21 List<ImageEntry> data;
22 GeoImageLayer layer;
23 MediaTracker tracker;
24 CacheFiles cache;
25 boolean cacheOff = Main.pref.getBoolean("geoimage.noThumbnailCache", false);
26
27 public ThumbsLoader(GeoImageLayer layer) {
28 this.layer = layer;
29 this.data = new ArrayList<ImageEntry>(layer.data);
30 if (!cacheOff) {
31 cache = new CacheFiles("geoimage-thumbnails", false);
32 cache.setExpire(CacheFiles.EXPIRE_NEVER, false);
33 cache.setMaxSize(120, false);
34 }
35 }
36
37 public void run() {
38 System.err.println("Load Thumbnails");
39 tracker = new MediaTracker(Main.map.mapView);
40 for (int i = 0; i < data.size(); i++) {
41 if (stop) return;
42
43 System.err.print("fetching image "+i);
44
45 data.get(i).thumbnail = loadThumb(data.get(i));
46
47 if (Main.map != null && Main.map.mapView != null) {
48 layer.updateOffscreenBuffer = true;
49 Main.map.mapView.repaint();
50 }
51 }
52 try {
53 layer.updateOffscreenBuffer = true;
54 } catch (Exception e) {}
55 Main.map.mapView.repaint();
56 (new Thread() { // clean up the garbage - shouldn't hurt
57 @Override
58 public void run() {
59 try {
60 Thread.sleep(200);
61 }
62 catch (InterruptedException ie) {}
63 System.gc();
64 }
65 }).start();
66
67 }
68
69 private BufferedImage loadThumb(ImageEntry entry) {
70 final String cacheIdent = entry.getFile().toString()+":"+maxSize;
71
72 if (!cacheOff) {
73 BufferedImage cached = cache.getImg(cacheIdent);
74 if(cached != null) {
75 System.err.println(" from cache");
76 return cached;
77 }
78 }
79
80 Image img = Toolkit.getDefaultToolkit().createImage(entry.getFile().getPath());
81 tracker.addImage(img, 0);
82 try {
83 tracker.waitForID(0);
84 } catch (InterruptedException e) {
85 System.err.println(" InterruptedException");
86 return null;
87 }
88 if (tracker.isErrorID(1) || img.getWidth(null) <= 0 || img.getHeight(null) <= 0) {
89 System.err.println(" Invalid image");
90 return null;
91 }
92 Rectangle targetSize = ImageDisplay.calculateDrawImageRectangle(
93 new Rectangle(0, 0, img.getWidth(null), img.getHeight(null)),
94 new Rectangle(0, 0, maxSize, maxSize));
95 BufferedImage scaledBI = new BufferedImage(targetSize.width, targetSize.height, BufferedImage.TYPE_INT_RGB);
96 Graphics2D g = scaledBI.createGraphics();
97 while (!g.drawImage(img, 0, 0, targetSize.width, targetSize.height, null))
98 {
99 try {
100 Thread.sleep(10);
101 } catch(InterruptedException ie) {}
102 }
103 g.dispose();
104 tracker.removeImage(img);
105
106 if (scaledBI.getWidth() <= 0 || scaledBI.getHeight() <= 0) {
107 System.err.println(" Invalid image");
108 return null;
109 }
110
111 if (!cacheOff) {
112 cache.saveImg(cacheIdent, scaledBI);
113 }
114
115 System.err.println("");
116 return scaledBI;
117 }
118
119}
Note: See TracBrowser for help on using the repository browser.