Ignore:
Timestamp:
2015-01-11T20:03:18+01:00 (9 years ago)
Author:
bastiK
Message:

fixed #10962 - Photo orientation should not be ignored for thumbnails

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java

    r7912 r7956  
    2727
    2828import org.openstreetmap.josm.Main;
     29import org.openstreetmap.josm.tools.ExifReader;
    2930
    3031public class ImageDisplay extends JComponent {
     
    103104                    final int h = (int) visibleRect.getHeight();
    104105
    105                     outer: {
    106                         final int hh, ww, q;
    107                         final double ax, ay;
    108                         switch (orientation) {
    109                         case 8:
    110                             q = -1;
    111                             ax = w / 2;
    112                             ay = w / 2;
     106                    if (ExifReader.orientationNeedsCorrection(orientation)) {
     107                        final int hh, ww;
     108                        if (ExifReader.orientationSwitchesDimensions(orientation)) {
    113109                            ww = h;
    114110                            hh = w;
    115                             break;
    116                         case 3:
    117                             q = 2;
    118                             ax = w / 2;
    119                             ay = h / 2;
     111                        } else {
    120112                            ww = w;
    121113                            hh = h;
    122                             break;
    123                         case 6:
    124                             q = 1;
    125                             ax = h / 2;
    126                             ay = h / 2;
    127                             ww = h;
    128                             hh = w;
    129                             break;
    130                         default:
    131                             break outer;
    132114                        }
    133 
    134115                        final BufferedImage rot = new BufferedImage(ww, hh, BufferedImage.TYPE_INT_RGB);
    135                         final AffineTransform xform = AffineTransform.getQuadrantRotateInstance(q, ax, ay);
     116                        final AffineTransform xform = ExifReader.getRestoreOrientationTransform(orientation, w, h);
    136117                        final Graphics2D g = rot.createGraphics();
    137118                        g.drawImage(image, xform, null);
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java

    r7935 r7956  
    77import java.awt.Rectangle;
    88import java.awt.Toolkit;
     9import java.awt.geom.AffineTransform;
    910import java.awt.image.BufferedImage;
    1011import java.util.ArrayList;
     
    1314import org.openstreetmap.josm.Main;
    1415import org.openstreetmap.josm.io.CacheFiles;
     16import org.openstreetmap.josm.tools.ExifReader;
    1517
    1618public class ThumbsLoader implements Runnable {
     
    7981            return null;
    8082        }
     83
     84        final int w = img.getWidth(null);
     85        final int h = img.getHeight(null);
     86        final int hh, ww;
     87        if (ExifReader.orientationSwitchesDimensions(entry.getExifOrientation())) {
     88            ww = h;
     89            hh = w;
     90        } else {
     91            ww = w;
     92            hh = h;
     93        }
     94
    8195        Rectangle targetSize = ImageDisplay.calculateDrawImageRectangle(
    82                 new Rectangle(0, 0, img.getWidth(null), img.getHeight(null)),
     96                new Rectangle(0, 0, ww, hh),
    8397                new Rectangle(0, 0, maxSize, maxSize));
    8498        BufferedImage scaledBI = new BufferedImage(targetSize.width, targetSize.height, BufferedImage.TYPE_INT_RGB);
    8599        Graphics2D g = scaledBI.createGraphics();
    86         while (!g.drawImage(img, 0, 0, targetSize.width, targetSize.height, null)) {
     100
     101        final AffineTransform restoreOrientation = ExifReader.getRestoreOrientationTransform(entry.getExifOrientation(), w, h);
     102        final AffineTransform scale = AffineTransform.getScaleInstance((double) targetSize.width / ww, (double) targetSize.height / hh);
     103        scale.concatenate(restoreOrientation);
     104
     105        while (!g.drawImage(img, scale, null)) {
    87106            try {
    88107                Thread.sleep(10);
  • trunk/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java

    r7937 r7956  
    188188            s.append(listKeys(Projections.nadgrids)+"<br>");
    189189            s.append("<b>+bounds=</b>minlon,minlat,maxlon,maxlat - <i>"+tr("Projection bounds (in degrees)")+"</i><br>");
    190             s.append("<b>+wmssrs=</b>EPSG:123456 - <i>"+tr("WMS SRS (EPSG code)")+"</i><br>");
     190            s.append("<b>+wmssrs=</b>EPSG:123456 - <i>"+tr("Sets the SRS=... parameter in the WMS request")+"</i><br>");
    191191
    192192            return new HtmlPanel(s.toString());
Note: See TracChangeset for help on using the changeset viewer.