X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fjpeg%2Fdrew%2FExifReader.java;h=08f30128035a8c2f2b7a483ba3e69daeeacf30d9;hb=649c5da6ee1bbc590699e11a92316ece2ea8512d;hp=d4df892770e395569272099de5dcaa9279aba687;hpb=140e9d165f85c3d4f0435a311e091209313faa2a;p=GpsPrune.git diff --git a/tim/prune/jpeg/drew/ExifReader.java b/tim/prune/jpeg/drew/ExifReader.java index d4df892..08f3012 100644 --- a/tim/prune/jpeg/drew/ExifReader.java +++ b/tim/prune/jpeg/drew/ExifReader.java @@ -3,6 +3,7 @@ package tim.prune.jpeg.drew; import java.io.File; import java.util.HashMap; +import tim.prune.jpeg.ExifGateway; import tim.prune.jpeg.JpegData; /** @@ -84,6 +85,8 @@ public class ExifReader private static final int TAG_THUMBNAIL_LENGTH = 0x0202; /** Orientation of image */ private static final int TAG_ORIENTATION = 0x0112; + /** Bearing direction of image */ + private static final int TAG_BEARING = 0x0011; /** @@ -93,8 +96,7 @@ public class ExifReader */ public ExifReader(File inFile) throws JpegException { - JpegSegmentData segments = JpegSegmentReader.readSegments(inFile); - _data = segments.getSegment(JpegSegmentReader.SEGMENT_APP1); + _data = JpegSegmentReader.readExifSegment(inFile); } /** @@ -343,14 +345,16 @@ public class ExifReader break; case TAG_GPS_LATITUDE: Rational[] latitudes = readRationalArray(inTagValueOffset, inFormatCode, inComponentCount); - inMetadata.setLatitude(new double[] {latitudes[0].doubleValue(), latitudes[1].doubleValue(), latitudes[2].doubleValue()}); + inMetadata.setLatitude(new double[] {latitudes[0].doubleValue(), latitudes[1].doubleValue(), + ExifGateway.convertToPositiveValue(latitudes[2].getNumerator(), latitudes[2].getDenominator())}); break; case TAG_GPS_LONGITUDE_REF: inMetadata.setLongitudeRef(readString(inTagValueOffset, inFormatCode, inComponentCount)); break; case TAG_GPS_LONGITUDE: Rational[] longitudes = readRationalArray(inTagValueOffset, inFormatCode, inComponentCount); - inMetadata.setLongitude(new double[] {longitudes[0].doubleValue(), longitudes[1].doubleValue(), longitudes[2].doubleValue()}); + inMetadata.setLongitude(new double[] {longitudes[0].doubleValue(), longitudes[1].doubleValue(), + ExifGateway.convertToPositiveValue(longitudes[2].getNumerator(), longitudes[2].getDenominator())}); break; case TAG_GPS_ALTITUDE_REF: inMetadata.setAltitudeRef(_data[inTagValueOffset]); @@ -367,7 +371,8 @@ public class ExifReader if (dates != null) { inMetadata.setGpsDatestamp(new int[] {dates[0].intValue(), dates[1].intValue(), dates[2].intValue()}); } - else { + else + { // Not in rational array format, but maybe as String? String date = readString(inTagValueOffset, inFormatCode, inComponentCount); if (date != null && date.length() == 10) { @@ -376,6 +381,12 @@ public class ExifReader } } break; + case TAG_BEARING: + Rational val = readRational(inTagValueOffset, inFormatCode, inComponentCount); + if (val != null) { + inMetadata.setBearing(val.doubleValue()); + } + break; default: // ignore all other tags } }