Ticket #5605: ImageDisplay.java.diff
| File ImageDisplay.java.diff, 3.6 KB (added by , 15 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
9 9 import java.awt.Dimension; 10 10 import java.awt.FontMetrics; 11 11 import java.awt.Graphics; 12 import java.awt.Graphics2D; 12 13 import java.awt.Image; 13 14 import java.awt.MediaTracker; 14 15 import java.awt.Point; … … 19 20 import java.awt.event.MouseMotionListener; 20 21 import java.awt.event.MouseWheelEvent; 21 22 import java.awt.event.MouseWheelListener; 23 import java.awt.geom.AffineTransform; 22 24 import java.awt.geom.Rectangle2D; 25 import java.awt.image.BufferedImage; 23 26 import java.io.File; 24 27 25 28 import javax.swing.JComponent; 26 29 27 30 import org.openstreetmap.josm.Main; 28 31 32 import com.drew.imaging.jpeg.JpegMetadataReader; 33 import com.drew.imaging.jpeg.JpegProcessingException; 34 import com.drew.metadata.Directory; 35 import com.drew.metadata.Metadata; 36 import com.drew.metadata.MetadataException; 37 import com.drew.metadata.exif.ExifDirectory; 38 29 39 public class ImageDisplay extends JComponent { 30 40 31 41 /** The file that is currently displayed */ … … 89 99 tracker.removeImage(img); 90 100 return; 91 101 } 102 92 103 ImageDisplay.this.image = img; 93 104 visibleRect = new Rectangle(0, 0, img.getWidth(null), img.getHeight(null)); 105 106 int orientation = -1; 107 try { 108 final Metadata metadata = JpegMetadataReader.readMetadata(file); 109 final Directory dir = metadata.getDirectory(ExifDirectory.class); 110 orientation = dir.getInt(ExifDirectory.TAG_ORIENTATION); 111 } catch (JpegProcessingException e1) { 112 e1.printStackTrace(); 113 } catch (MetadataException e) { 114 e.printStackTrace(); 115 } 116 117 final int w = (int) visibleRect.getWidth(); 118 final int h = (int) visibleRect.getHeight(); 119 120 outer: { 121 final int hh, ww, q; 122 final double ax, ay; 123 switch (orientation) { 124 case 8: 125 q = -1; 126 ax = w / 2; 127 ay = w / 2; 128 ww = h; 129 hh = w; 130 break; 131 case 3: 132 q = 2; 133 ax = w / 2; 134 ay = h / 2; 135 ww = w; 136 hh = h; 137 break; 138 case 6: 139 q = 1; 140 ax = h / 2; 141 ay = h / 2; 142 ww = h; 143 hh = w; 144 break; 145 default: 146 break outer; 147 } 148 149 final BufferedImage rot = new BufferedImage(ww, hh, BufferedImage.TYPE_INT_RGB); 150 final AffineTransform xform = AffineTransform.getQuadrantRotateInstance(q, ax, ay); 151 final Graphics2D g = rot.createGraphics(); 152 g.drawImage(image, xform, null); 153 g.dispose(); 154 155 visibleRect.setSize(ww, hh); 156 image.flush(); 157 ImageDisplay.this.image = rot; 158 } 159 94 160 selectedRect = null; 95 161 errorLoading = error; 96 162 }
