You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sanselan-commits@incubator.apache.org by cm...@apache.org on 2008/01/23 04:45:09 UTC
svn commit: r614420 [2/3] - in /incubator/sanselan/trunk/src:
main/java/org/apache/sanselan/ main/java/org/apache/sanselan/common/
main/java/org/apache/sanselan/common/byteSources/
main/java/org/apache/sanselan/formats/bmp/ main/java/org/apache/sansela...
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java Tue Jan 22 20:44:55 2008
@@ -24,13 +24,18 @@
import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.common.ImageMetadata;
+import org.apache.sanselan.common.RationalNumber;
import org.apache.sanselan.formats.tiff.constants.TagInfo;
+import org.apache.sanselan.formats.tiff.constants.TiffConstants;
+import org.apache.sanselan.formats.tiff.constants.TiffDirectoryConstants;
import org.apache.sanselan.formats.tiff.fieldtypes.FieldType;
import org.apache.sanselan.formats.tiff.write.TiffOutputDirectory;
import org.apache.sanselan.formats.tiff.write.TiffOutputField;
import org.apache.sanselan.formats.tiff.write.TiffOutputSet;
public class TiffImageMetadata extends ImageMetadata
+ implements
+ TiffDirectoryConstants
{
public final TiffContents contents;
@@ -71,6 +76,16 @@
return directory.getTiffImageData();
}
+ public TiffField findField(TagInfo tagInfo) throws ImageReadException
+ {
+ return directory.findField(tagInfo);
+ }
+
+ public List getAllFields() throws ImageReadException
+ {
+ return directory.getDirectoryEntrys();
+ }
+
public JpegImageData getJpegImageData()
{
return directory.getJpegImageData();
@@ -88,49 +103,65 @@
public TiffOutputDirectory getOutputDirectory(int byteOrder)
throws ImageWriteException
{
- TiffOutputDirectory dstDir = new TiffOutputDirectory(type);
-
- ArrayList entries = getItems();
- for (int i = 0; i < entries.size(); i++)
+ try
{
- TiffImageMetadata.Item item = (TiffImageMetadata.Item) entries
- .get(i);
- TiffField srcField = item.getTiffField();
+ TiffOutputDirectory dstDir = new TiffOutputDirectory(type);
- if (null != dstDir.findField(srcField.tag))
+ ArrayList entries = getItems();
+ for (int i = 0; i < entries.size(); i++)
{
- // ignore duplicate tags in a directory.
- continue;
+ TiffImageMetadata.Item item = (TiffImageMetadata.Item) entries
+ .get(i);
+ TiffField srcField = item.getTiffField();
+
+ if (null != dstDir.findField(srcField.tag))
+ {
+ // ignore duplicate tags in a directory.
+ continue;
+ }
+ else if (srcField.tagInfo instanceof TagInfo.Offset)
+ {
+ // ignore offset fields.
+ continue;
+ }
+
+ TagInfo tagInfo = srcField.tagInfo;
+ FieldType fieldType = srcField.fieldType;
+ int count = srcField.length;
+ // byte bytes[] = srcField.fieldType.getRawBytes(srcField);
+
+ // Debug.debug("tagInfo", tagInfo);
+
+ Object value = srcField.getValue();
+
+ // Debug.debug("value", Debug.getType(value));
+
+ byte bytes[] = tagInfo.encodeValue(fieldType, value,
+ byteOrder);
+
+ // if (tagInfo.isUnknown())
+ // Debug.debug(
+ // "\t" + "unknown tag(0x"
+ // + Integer.toHexString(srcField.tag)
+ // + ") bytes", bytes);
+
+ TiffOutputField dstField = new TiffOutputField(
+ srcField.tag, tagInfo, fieldType, count, bytes);
+ dstField.setSortHint(srcField.getSortHint());
+ dstDir.add(dstField);
}
- else if (srcField.tagInfo instanceof TagInfo.Offset)
- {
- // ignore offset fields.
- continue;
- }
-
- TagInfo tagInfo = srcField.tagInfo;
- FieldType fieldType = srcField.fieldType;
- int count = srcField.length;
- // byte bytes[] = srcField.fieldType.getRawBytes(srcField);
-
- Object value = srcField.getValue();
- byte bytes2[];
- if (tagInfo.isDate())
- bytes2 = fieldType.getRawBytes(srcField);
- else
- bytes2 = fieldType.writeData(value, byteOrder);
- // Debug.debug("\t" + "bytes2", bytes2);
-
- TiffOutputField dstField = new TiffOutputField(srcField.tag,
- tagInfo, fieldType, count, bytes2);
- dstDir.add(dstField);
- }
- dstDir.setTiffImageData(getTiffImageData());
- dstDir.setJpegImageData(getJpegImageData());
+ dstDir.setTiffImageData(getTiffImageData());
+ dstDir.setJpegImageData(getJpegImageData());
- return dstDir;
+ return dstDir;
+ }
+ catch (ImageReadException e)
+ {
+ throw new ImageWriteException(e.getMessage(), e);
+ }
}
+
}
public ArrayList getDirectories()
@@ -195,6 +226,140 @@
}
return result;
+ }
+
+ public TiffField findField(TagInfo tagInfo) throws ImageReadException
+ {
+ ArrayList directories = getDirectories();
+ for (int i = 0; i < directories.size(); i++)
+ {
+ Directory directory = (Directory) directories.get(i);
+ TiffField field = directory.findField(tagInfo);
+ if (null != field)
+ return field;
+ }
+ return null;
+ }
+
+ public TiffDirectory findDirectory(int directoryType)
+ {
+ ArrayList directories = getDirectories();
+ for (int i = 0; i < directories.size(); i++)
+ {
+ Directory directory = (Directory) directories.get(i);
+ if (directory.type == directoryType)
+ return directory.directory;
+ }
+ return null;
+ }
+
+ public List getAllFields() throws ImageReadException
+ {
+ List result = new ArrayList();
+ ArrayList directories = getDirectories();
+ for (int i = 0; i < directories.size(); i++)
+ {
+ Directory directory = (Directory) directories.get(i);
+ result.addAll(directory.getAllFields());
+ }
+ return result;
+ }
+
+ public GPSInfo getGPS() throws ImageReadException
+ {
+ TiffDirectory gpsDirectory = findDirectory(DIRECTORY_TYPE_GPS);
+ if (null == gpsDirectory)
+ return null;
+
+ // more specific example of how to access GPS values.
+ TiffField latitudeRefField = gpsDirectory
+ .findField(TiffConstants.GPS_TAG_GPS_LATITUDE_REF);
+ TiffField latitudeField = gpsDirectory
+ .findField(TiffConstants.GPS_TAG_GPS_LATITUDE);
+ TiffField longitudeRefField = gpsDirectory
+ .findField(TiffConstants.GPS_TAG_GPS_LONGITUDE_REF);
+ TiffField longitudeField = gpsDirectory
+ .findField(TiffConstants.GPS_TAG_GPS_LONGITUDE);
+
+ if (latitudeRefField == null || latitudeField == null
+ || longitudeRefField == null || longitudeField == null)
+ return null;
+
+ // all of these values are strings.
+ String latitudeRef = latitudeRefField.getStringValue();
+ RationalNumber latitude[] = (RationalNumber[]) latitudeField.getValue();
+ String longitudeRef = longitudeRefField.getStringValue();
+ RationalNumber longitude[] = (RationalNumber[]) longitudeField
+ .getValue();
+
+ if (latitude.length != 3 || longitude.length != 3)
+ throw new ImageReadException(
+ "Expected three values for latitude and longitude.");
+
+ RationalNumber latitudeDegrees = latitude[0];
+ RationalNumber latitudeMinutes = latitude[1];
+ RationalNumber latitudeSeconds = latitude[2];
+
+ RationalNumber longitudeDegrees = longitude[0];
+ RationalNumber longitudeMinutes = longitude[1];
+ RationalNumber longitudeSeconds = longitude[2];
+
+ return new GPSInfo(latitudeRef, longitudeRef, latitudeDegrees,
+ latitudeMinutes, latitudeSeconds, longitudeDegrees,
+ longitudeMinutes, longitudeSeconds);
+ }
+
+ public static class GPSInfo
+ {
+ public final String latitudeRef;
+ public final String longitudeRef;
+
+ public final RationalNumber latitudeDegrees;
+ public final RationalNumber latitudeMinutes;
+ public final RationalNumber latitudeSeconds;
+ public final RationalNumber longitudeDegrees;
+ public final RationalNumber longitudeMinutes;
+ public final RationalNumber longitudeSeconds;
+
+ public GPSInfo(final String latitudeRef, final String longitudeRef,
+ final RationalNumber latitudeDegrees,
+ final RationalNumber latitudeMinutes,
+ final RationalNumber latitudeSeconds,
+ final RationalNumber longitudeDegrees,
+ final RationalNumber longitudeMinutes,
+ final RationalNumber longitudeSeconds)
+ {
+ this.latitudeRef = latitudeRef;
+ this.longitudeRef = longitudeRef;
+ this.latitudeDegrees = latitudeDegrees;
+ this.latitudeMinutes = latitudeMinutes;
+ this.latitudeSeconds = latitudeSeconds;
+ this.longitudeDegrees = longitudeDegrees;
+ this.longitudeMinutes = longitudeMinutes;
+ this.longitudeSeconds = longitudeSeconds;
+ }
+
+ public String toString()
+ {
+ // This will format the gps info like so:
+ //
+ // latitude: 8 degrees, 40 minutes, 42.2 seconds S
+ // longitude: 115 degrees, 26 minutes, 21.8 seconds E
+
+ StringBuffer result = new StringBuffer();
+ result.append("[GPS. ");
+ result.append("Latitude: " + latitudeDegrees.toDisplayString()
+ + " degrees, " + latitudeMinutes.toDisplayString()
+ + " minutes, " + latitudeSeconds.toDisplayString()
+ + " seconds " + latitudeRef);
+ result.append(", Longitude: " + longitudeDegrees.toDisplayString()
+ + " degrees, " + longitudeMinutes.toDisplayString()
+ + " minutes, " + longitudeSeconds.toDisplayString()
+ + " seconds " + longitudeRef);
+ result.append("]");
+
+ return result.toString();
+ }
}
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageParser.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageParser.java Tue Jan 22 20:44:55 2008
@@ -152,13 +152,12 @@
return result;
}
- public ImageInfo getImageInfo(ByteSource byteSource)
+ public ImageInfo getImageInfo(ByteSource byteSource, Map params)
throws ImageReadException, IOException
{
FormatCompliance formatCompliance = FormatCompliance.getDefault();
- Map params = null;
- TiffContents contents = new TiffReader().readFirstDirectory(byteSource,
- params, false, formatCompliance);
+ TiffContents contents = new TiffReader().readDirectories(byteSource,
+ false, formatCompliance);
TiffDirectory directory = (TiffDirectory) contents.directories.get(0);
TiffField widthField = directory.findField(TIFF_TAG_IMAGE_WIDTH, true);
@@ -250,8 +249,7 @@
ImageFormat format = ImageFormat.IMAGE_FORMAT_TIFF;
String formatName = "TIFF Tag-based Image File Format";
String mimeType = "image/tiff";
- // we ought to count images, but don't yet.
- int numberOfImages = -1;
+ int numberOfImages = contents.directories.size();
// not accurate ... only reflects first
boolean isProgressive = false;
// is TIFF ever interlaced/progressive?
@@ -329,7 +327,8 @@
// try
{
- FormatCompliance formatCompliance = FormatCompliance.getDefault();
+ FormatCompliance formatCompliance = FormatCompliance
+ .getDefault();
Map params = null;
TiffContents contents = new TiffReader().readContents(
byteSource, params, formatCompliance);
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffReader.java Tue Jan 22 20:44:55 2008
@@ -128,14 +128,19 @@
ArrayList fields = new ArrayList();
-// Debug.debug("dirType", dirType);
-// Debug.debug("offset", offset);
-
+ // Debug.debug();
+ // Debug.debug("dirType", dirType);
+ // Debug.debug("offset", offset);
+ //
+ // if(offset>=byteSource.getLength())
+ // {
+ // Debug.debug("skipping invalid directory!");
+ // return true;
+ // }
int entryCount = read2Bytes("DirectoryEntryCount", is,
"Not a Valid TIFF File");
-// Debug.debug("entryCount", entryCount);
-// Debug.debug();
+ // Debug.debug("entryCount", entryCount);
for (int i = 0; i < entryCount; i++)
{
@@ -154,6 +159,7 @@
// {
TiffField field = new TiffField(tag, dirType, type, length,
valueOffset, valueOffsetBytes, getByteOrder());
+ field.setSortHint(i);
field.fillInValue(byteSource);
@@ -220,7 +226,7 @@
boolean subDirectoryRead = readDirectory(byteSource,
subDirectoryOffset, subDirectoryType,
formatCompliance, listener, true, visited);
-
+
if (!subDirectoryRead)
{
// Offset field pointed to invalid location.
@@ -238,7 +244,7 @@
readDirectory(byteSource, directory.nextDirectoryOffset,
dirType + 1, formatCompliance, listener, visited);
}
-
+
return true;
}
finally
@@ -273,6 +279,21 @@
private TiffHeader tiffHeader = null;
private ArrayList directories = new ArrayList();
private ArrayList fields = new ArrayList();
+ private final boolean readThumbnails;
+
+ public Collector()
+ {
+ this(null);
+ }
+
+ public Collector(Map params)
+ {
+ boolean readThumbnails = true;
+ if (params != null && params.containsKey(PARAM_KEY_READ_THUMBNAILS))
+ readThumbnails = Boolean.TRUE.equals(params
+ .get(PARAM_KEY_READ_THUMBNAILS));
+ this.readThumbnails = readThumbnails;
+ }
public boolean setTiffHeader(TiffHeader tiffHeader)
{
@@ -294,7 +315,7 @@
public boolean readImageData()
{
- return true;
+ return readThumbnails;
}
public boolean readOffsetDirectories()
@@ -329,6 +350,27 @@
}
}
+ private static class DirectoryCollector extends Collector
+ {
+ private final boolean readImageData;
+
+ public DirectoryCollector(final boolean readImageData)
+ {
+ this.readImageData = readImageData;
+ }
+
+ public boolean addDirectory(TiffDirectory directory)
+ {
+ super.addDirectory(directory);
+ return false;
+ }
+
+ public boolean readImageData()
+ {
+ return readImageData;
+ }
+ }
+
public TiffContents readFirstDirectory(ByteSource byteSource, Map params,
boolean readImageData, FormatCompliance formatCompliance)
throws ImageReadException, IOException
@@ -342,11 +384,25 @@
return contents;
}
+ public TiffContents readDirectories(ByteSource byteSource,
+ boolean readImageData, FormatCompliance formatCompliance)
+ throws ImageReadException, IOException
+ {
+ Collector collector = new FirstDirectoryCollector(readImageData);
+ readDirectories(byteSource, formatCompliance, collector);
+ TiffContents contents = collector.getContents();
+ if (contents.directories.size() < 1)
+ throw new ImageReadException(
+ "Image did not contain any directories.");
+ return contents;
+ }
+
public TiffContents readContents(ByteSource byteSource, Map params,
FormatCompliance formatCompliance) throws ImageReadException,
IOException
{
- Collector collector = new Collector();
+
+ Collector collector = new Collector(params);
read(byteSource, params, formatCompliance, collector);
TiffContents contents = collector.getContents();
return contents;
@@ -405,8 +461,13 @@
TiffDirectory directory) throws ImageReadException, IOException
{
ImageDataElement element = directory.getJpegRawImageDataElement();
- byte data[] = byteSource.getBlock(element.offset, element.length);
- return new JpegImageData(element.offset, element.length, data);
+ int offset = element.offset;
+ int length = element.length;
+ // Sony DCR-PC110 has an off-by-one error.
+ if (offset + length == byteSource.getLength() + 1)
+ length--;
+ byte data[] = byteSource.getBlock(offset, length);
+ return new JpegImageData(offset, length, data);
}
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/ExifTagConstants.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/ExifTagConstants.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/ExifTagConstants.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/ExifTagConstants.java Tue Jan 22 20:44:55 2008
@@ -125,13 +125,13 @@
public static final TagInfo EXIF_TAG_MODEL = new TagInfo("Model", 0x0110,
FIELD_TYPE_ASCII, 1, EXIF_DIRECTORY_IFD0);
// poly tag public static final TagInfo2 EXIF_TAG_STRIP_OFFSETS = new TagInfo2( "StripOffsets", 0x0111, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
- public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_START_IFD0 = new TagInfo(
+ public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_START_IFD0 = new TagInfo.Offset(
"Preview Image Start", 0x0111, FIELD_TYPE_LONG, 1,
EXIF_DIRECTORY_IFD0);
- public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_START_SUB_IFD1 = new TagInfo(
+ public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_START_SUB_IFD1 = new TagInfo.Offset(
"Preview Image Start", 0x0111, FIELD_TYPE_LONG, 1,
EXIF_DIRECTORY_SUB_IFD1);
- public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD2 = new TagInfo(
+ public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD2 = new TagInfo.Offset(
"Jpg From Raw Start", 0x0111, FIELD_TYPE_LONG, 1,
EXIF_DIRECTORY_SUB_IFD2);
public static final TagInfo EXIF_TAG_ORIENTATION = new TagInfo(
@@ -352,13 +352,13 @@
public static final TagInfo EXIF_TAG_PREVIEW_IMAGE_START_MAKER_NOTES = new TagInfo(
"Preview Image Start", 0x0201, FIELD_TYPE_LONG, 1,
EXIF_DIRECTORY_MAKER_NOTES);
- public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD = new TagInfo(
+ public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD = new TagInfo.Offset(
"Jpg From Raw Start", 0x0201, FIELD_TYPE_LONG, 1,
EXIF_DIRECTORY_SUB_IFD);
- public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_IFD2 = new TagInfo(
+ public static final TagInfo EXIF_TAG_JPG_FROM_RAW_START_IFD2 = new TagInfo.Offset(
"Jpg From Raw Start", 0x0201, FIELD_TYPE_LONG, 1,
EXIF_DIRECTORY_IFD2);
- public static final TagInfo EXIF_TAG_OTHER_IMAGE_START = new TagInfo(
+ public static final TagInfo EXIF_TAG_OTHER_IMAGE_START = new TagInfo.Offset(
"Other Image Start", 0x0201, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1,
EXIF_DIRECTORY_UNKNOWN);
// poly tag public static final TagInfo2 EXIF_TAG_THUMBNAIL_LENGTH = new TagInfo2( "ThumbnailLength", 0x0202, FIELD_TYPE_LONG, 1, EXIF_DIRECTORY_IFD1);
@@ -759,7 +759,12 @@
public static final int SENSING_METHOD_VALUE_COLOR_SEQUENTIAL_LINEAR = 8;
public static final TagInfo EXIF_TAG_STO_NITS = new TagInfo("Sto Nits",
0x923f, FIELD_TYPE_DESCRIPTION_UNKNOWN, 1, EXIF_DIRECTORY_UNKNOWN);
- // skipping Maker Note! public static final TagInfo2 EXIF_TAG_USER_COMMENT = new TagInfo2( "UserComment", 0x9286, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_EXIF_IFD);
+ // skipping Maker Note!
+ public static final TagInfo EXIF_TAG_MAKER_NOTE = new TagInfo("Maker Note",
+ 0x927c, FIELD_TYPE_UNDEFINED, 1, EXIF_DIRECTORY_EXIF_IFD);
+ public static final TagInfo EXIF_TAG_USER_COMMENT = new TagInfo.Text(
+ "UserComment", 0x9286, FIELD_TYPE_UNDEFINED, 1,
+ EXIF_DIRECTORY_EXIF_IFD);
public static final TagInfo EXIF_TAG_SUB_SEC_TIME = new TagInfo(
"Sub Sec Time", 0x9290, FIELD_TYPE_ASCII, 1,
EXIF_DIRECTORY_EXIF_IFD);
@@ -1464,5 +1469,9 @@
EXIF_TAG_SHADOWS, EXIF_TAG_BRIGHTNESS, EXIF_TAG_CONTRAST_2,
EXIF_TAG_SATURATION_2, EXIF_TAG_SHARPNESS_2, EXIF_TAG_SMOOTHNESS,
EXIF_TAG_MOIRE_FILTER,
+
+ EXIF_TAG_USER_COMMENT, //
+
+ EXIF_TAG_MAKER_NOTE, //
};
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/GPSTagConstants.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/GPSTagConstants.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/GPSTagConstants.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/GPSTagConstants.java Tue Jan 22 20:44:55 2008
@@ -178,12 +178,12 @@
EXIF_DIRECTORY_GPS);
// ************************************************************
- public static final TagInfo GPS_TAG_GPS_PROCESSING_METHOD = new TagInfo(
+ public static final TagInfo GPS_TAG_GPS_PROCESSING_METHOD = new TagInfo.Text(
"GPS Processing Method", 0x001b, FIELD_TYPE_DESCRIPTION_UNKNOWN,
-1, EXIF_DIRECTORY_GPS);
// ************************************************************
- public static final TagInfo GPS_TAG_GPS_AREA_INFORMATION = new TagInfo(
+ public static final TagInfo GPS_TAG_GPS_AREA_INFORMATION = new TagInfo.Text(
"GPS Area Information", 0x001c, FIELD_TYPE_DESCRIPTION_UNKNOWN, -1,
EXIF_DIRECTORY_GPS);
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagConstantsUtils.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagConstantsUtils.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagConstantsUtils.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagConstantsUtils.java Tue Jan 22 20:44:55 2008
@@ -16,7 +16,6 @@
*/
package org.apache.sanselan.formats.tiff.constants;
-
public class TagConstantsUtils implements TiffDirectoryConstants
{
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo.java Tue Jan 22 20:44:55 2008
@@ -3,14 +3,18 @@
*/
package org.apache.sanselan.formats.tiff.constants;
+import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
+import org.apache.sanselan.ImageReadException;
+import org.apache.sanselan.ImageWriteException;
+import org.apache.sanselan.common.BinaryFileFunctions;
import org.apache.sanselan.formats.tiff.TiffField;
import org.apache.sanselan.formats.tiff.fieldtypes.FieldType;
import org.apache.sanselan.util.Debug;
-public class TagInfo implements TiffDirectoryConstants
+public class TagInfo implements TiffDirectoryConstants, TiffFieldTypeConstants
{
protected static final int LENGTH_UNKNOWN = -1;
@@ -53,11 +57,12 @@
{
this(name, tag, dataTypes, length, EXIF_DIRECTORY_UNKNOWN);
}
+
public final String name;
public final int tag;
public final FieldType dataTypes[];
public final int length;
- public final ExifDirectoryType exifDirectory;
+ public final ExifDirectoryType directoryType;
// public final String lengthDescription;
@@ -71,15 +76,21 @@
this.dataTypes = dataTypes;
this.length = length;
// this.lengthDescription = lengthDescription;
- this.exifDirectory = exifDirectory;
+ this.directoryType = exifDirectory;
}
- public Object getValue(TiffField entry)
+ public Object getValue(TiffField entry) throws ImageReadException
{
Object o = entry.fieldType.getSimpleValue(entry);
return o;
}
+ public byte[] encodeValue(FieldType fieldType, Object value, int byteOrder)
+ throws ImageWriteException
+ {
+ return fieldType.writeData(value, byteOrder);
+ }
+
public String getDescription()
{
return tag + " (0x" + Integer.toHexString(tag) + ": " + name + "): ";
@@ -101,6 +112,16 @@
return false;
}
+ public boolean isText()
+ {
+ return false;
+ }
+
+ public boolean isUnknown()
+ {
+ return false;
+ }
+
public static class Offset extends TagInfo
{
public Offset(String name, int tag, FieldType dataTypes[], int length,
@@ -108,6 +129,11 @@
{
super(name, tag, dataTypes, length, exifDirectory);
}
+ public Offset(String name, int tag, FieldType dataType, int length,
+ ExifDirectoryType exifDirectory)
+ {
+ super(name, tag, dataType, length, exifDirectory);
+ }
public Offset(String name, int tag, FieldType dataType, int length)
{
@@ -134,7 +160,7 @@
private static final DateFormat DATE_FORMAT_2 = new SimpleDateFormat(
"yyyy:MM:dd:HH:mm:ss");
- public Object getValue(TiffField entry)
+ public Object getValue(TiffField entry) throws ImageReadException
{
Object o = entry.fieldType.getSimpleValue(entry);
@@ -161,6 +187,21 @@
return o;
}
+ public byte[] encodeValue(FieldType fieldType, Object value,
+ int byteOrder) throws ImageWriteException
+ {
+ throw new ImageWriteException("date encode value: " + value + " ("
+ + Debug.getType(value) + ")");
+ // return fieldType.writeData(value, byteOrder);
+ // Object o = entry.fieldType.getSimpleValue(entry);
+ // byte bytes2[];
+ // if (tagInfo.isDate())
+ // bytes2 = fieldType.getRawBytes(srcField);
+ // else
+ // bytes2 = fieldType.writeData(value, byteOrder);
+ // return o;
+ }
+
public String toString()
{
return "[TagInfo. tag: " + tag + ", name: " + name + " (data)"
@@ -174,4 +215,218 @@
}
}
+
+ public static final class Text extends TagInfo
+ {
+ public Text(String name, int tag, FieldType dataType, int length,
+ ExifDirectoryType exifDirectory)
+ {
+ super(name, tag, dataType, length, exifDirectory);
+ }
+
+ public Text(String name, int tag, FieldType dataTypes[], int length,
+ ExifDirectoryType exifDirectory)
+ {
+ super(name, tag, dataTypes, length, exifDirectory);
+ }
+
+ public boolean isText()
+ {
+ return true;
+ }
+
+ private static final class TextEncoding
+ {
+ public final byte prefix[];
+ public final String encodingName;
+
+ public TextEncoding(final byte[] prefix, final String encodingName)
+ {
+ this.prefix = prefix;
+ this.encodingName = encodingName;
+ }
+ }
+
+ private static final TextEncoding TEXT_ENCODING_ASCII = new TextEncoding(
+ new byte[]{
+ 0x41, 0x53, 0x43, 0x49, 0x49, 0x00, 0x00, 0x00,
+ }, "US-ASCII"); // ITU-T T.50 IA5
+ private static final TextEncoding TEXT_ENCODING_JIS = new TextEncoding(
+ new byte[]{
+ 0x4A, 0x49, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00,
+ }, "JIS"); // JIS X208-1990
+ private static final TextEncoding TEXT_ENCODING_UNICODE = new TextEncoding(
+ new byte[]{
+ 0x55, 0x4E, 0x49, 0x43, 0x4F, 0x44, 0x45, 0x00,
+ // Which Unicode encoding to use, UTF-8?
+ }, "UTF-8"); // Unicode Standard
+ private static final TextEncoding TEXT_ENCODING_UNDEFINED = new TextEncoding(
+ new byte[]{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Try to interpret an undefined text as ISO-8859-1 (Latin)
+ }, "ISO-8859-1"); // Undefined
+ private static final TextEncoding TEXT_ENCODINGS[] = {
+ TEXT_ENCODING_ASCII, //
+ TEXT_ENCODING_JIS, //
+ TEXT_ENCODING_UNICODE, //
+ TEXT_ENCODING_UNDEFINED, //
+ };
+
+ public byte[] encodeValue(FieldType fieldType, Object value,
+ int byteOrder) throws ImageWriteException
+ {
+ if (!(value instanceof String))
+ throw new ImageWriteException("Text value not String: " + value
+ + " (" + Debug.getType(value) + ")");
+ String s = (String) value;
+
+ try
+ {
+ // try ASCII, with NO prefix.
+ byte asciiBytes[] = s
+ .getBytes(TEXT_ENCODING_ASCII.encodingName);
+ String decodedAscii = new String(asciiBytes,
+ TEXT_ENCODING_ASCII.encodingName);
+ if (decodedAscii.equals(s))
+ {
+ // no unicode/non-ascii values.
+ byte result[] = new byte[asciiBytes.length
+ + TEXT_ENCODING_ASCII.prefix.length];
+ System.arraycopy(TEXT_ENCODING_ASCII.prefix, 0, result, 0,
+ TEXT_ENCODING_ASCII.prefix.length);
+ System.arraycopy(asciiBytes, 0, result,
+ TEXT_ENCODING_ASCII.prefix.length,
+ asciiBytes.length);
+ return result;
+ }
+ else
+ {
+ // use unicode
+ byte unicodeBytes[] = s
+ .getBytes(TEXT_ENCODING_UNICODE.encodingName);
+ byte result[] = new byte[unicodeBytes.length
+ + TEXT_ENCODING_UNICODE.prefix.length];
+ System.arraycopy(TEXT_ENCODING_UNICODE.prefix, 0, result,
+ 0, TEXT_ENCODING_UNICODE.prefix.length);
+ System.arraycopy(unicodeBytes, 0, result,
+ TEXT_ENCODING_UNICODE.prefix.length,
+ unicodeBytes.length);
+ return result;
+ }
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new ImageWriteException(e.getMessage(), e);
+ }
+ }
+
+ public Object getValue(TiffField entry) throws ImageReadException
+ {
+ // Debug.debug("entry.type", entry.type);
+ // Debug.debug("entry.type", entry.getDescriptionWithoutValue());
+ // Debug.debug("entry.type", entry.fieldType);
+
+ if (entry.type == FIELD_TYPE_ASCII.type)
+ return FIELD_TYPE_ASCII.getSimpleValue(entry);
+ else if (entry.type == FIELD_TYPE_UNDEFINED.type)
+ ;
+ else if (entry.type == FIELD_TYPE_BYTE.type)
+ ;
+ else
+ {
+ Debug.debug("entry.type", entry.type);
+ Debug.debug("entry.directoryType", entry.directoryType);
+ Debug.debug("entry.type", entry.getDescriptionWithoutValue());
+ Debug.debug("entry.type", entry.fieldType);
+ throw new ImageReadException("Text field not encoded as bytes.");
+ }
+
+ byte bytes[] = entry.fieldType.getRawBytes(entry);
+ if (bytes.length < 8)
+ {
+ try
+ {
+ // try ASCII, with NO prefix.
+ return new String(bytes, "US-ASCII");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new ImageReadException(
+ "Text field missing encoding prefix.");
+ }
+ }
+
+ for (int i = 0; i < TEXT_ENCODINGS.length; i++)
+ {
+ TextEncoding encoding = TEXT_ENCODINGS[i];
+ if (BinaryFileFunctions.compareBytes(bytes, 0, encoding.prefix,
+ 0, encoding.prefix.length))
+ {
+ try
+ {
+ // Debug.debug("encodingName", encoding.encodingName);
+ return new String(bytes, encoding.prefix.length,
+ bytes.length - encoding.prefix.length,
+ encoding.encodingName);
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new ImageReadException(e.getMessage(), e);
+ }
+ }
+ }
+
+ // Debug.debug("entry.tag", entry.tag + " (0x" + Integer.toHexString(entry.tag ) +")");
+ // Debug.debug("entry.type", entry.type);
+ // Debug.debug("bytes", bytes, 10);
+ // throw new ImageReadException(
+ // "Unknown Text encoding prefix.");
+
+ try
+ {
+ // try ASCII, with NO prefix.
+ return new String(bytes, "US-ASCII");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new ImageReadException("Unknown text encoding prefix.");
+ }
+
+ }
+ }
+
+ public static final class Unknown extends TagInfo
+ {
+
+ public Unknown(String name, int tag, FieldType dataTypes[], int length,
+ ExifDirectoryType exifDirectory)
+ {
+ super(name, tag, dataTypes, length, exifDirectory);
+ }
+
+ public boolean isUnknown()
+ {
+ return true;
+ }
+
+ public byte[] encodeValue(FieldType fieldType, Object value,
+ int byteOrder) throws ImageWriteException
+ {
+// Debug.debug();
+// Debug.debug("unknown tag(0x" + Integer.toHexString(tag) + ") ",
+// this);
+// Debug.debug("unknown tag fieldType", fieldType);
+// Debug.debug("unknown tag value", value);
+// Debug.debug("unknown tag value", Debug.getType(value));
+ byte result[] = super.encodeValue(fieldType, value, byteOrder);
+// Debug.debug("unknown tag result", result);
+ return result;
+ }
+
+ public Object getValue(TiffField entry) throws ImageReadException
+ {
+ return super.getValue(entry);
+ }
+ }
+
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffDirectoryConstants.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffDirectoryConstants.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffDirectoryConstants.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffDirectoryConstants.java Tue Jan 22 20:44:55 2008
@@ -37,7 +37,7 @@
public static final int DIRECTORY_TYPE_DIR_3 = 3;
public static final int DIRECTORY_TYPE_DIR_4 = 4;
- public static class ExifDirectoryType
+ public abstract static class ExifDirectoryType
{
public final int directoryType;
public final String name;
@@ -47,38 +47,69 @@
this.directoryType = directoryType;
this.name = name;
}
+
+ public abstract boolean isImageDirectory();
+
+ public static class Image extends ExifDirectoryType
+ {
+ public Image(final int directoryType, final String name)
+ {
+ super(directoryType, name);
+ }
+
+ public boolean isImageDirectory()
+ {
+ return true;
+ }
+ }
+
+ public static class Special extends ExifDirectoryType
+ {
+ public Special(final int directoryType, final String name)
+ {
+ super(directoryType, name);
+ }
+
+ public boolean isImageDirectory()
+ {
+ return false;
+ }
+ }
+
}
- public static final ExifDirectoryType TIFF_DIRECTORY_ROOT = new ExifDirectoryType(
- DIRECTORY_TYPE_ROOT, "Root");
- public static final ExifDirectoryType EXIF_DIRECTORY_EXIF_IFD = new ExifDirectoryType(
- DIRECTORY_TYPE_EXIF, "Exif IFD");
- public static final ExifDirectoryType TIFF_DIRECTORY_IFD0 = new ExifDirectoryType(
- DIRECTORY_TYPE_DIR_0, "IFD0");
- public static final ExifDirectoryType EXIF_DIRECTORY_IFD0 = new ExifDirectoryType(
+ public static final ExifDirectoryType TIFF_DIRECTORY_IFD0 = new ExifDirectoryType.Image(
DIRECTORY_TYPE_DIR_0, "IFD0");
- public static final ExifDirectoryType TIFF_DIRECTORY_IFD1 = new ExifDirectoryType(
- DIRECTORY_TYPE_DIR_1, "IFD1");
- public static final ExifDirectoryType EXIF_DIRECTORY_IFD1 = new ExifDirectoryType(
+ public static final ExifDirectoryType EXIF_DIRECTORY_IFD0 = TIFF_DIRECTORY_IFD0;
+ public static final ExifDirectoryType TIFF_DIRECTORY_ROOT = TIFF_DIRECTORY_IFD0;
+
+ public static final ExifDirectoryType TIFF_DIRECTORY_IFD1 = new ExifDirectoryType.Image(
DIRECTORY_TYPE_DIR_1, "IFD1");
- public static final ExifDirectoryType TIFF_DIRECTORY_IFD2 = new ExifDirectoryType(
- DIRECTORY_TYPE_DIR_2, "IFD2");
- public static final ExifDirectoryType EXIF_DIRECTORY_IFD2 = new ExifDirectoryType(
+ public static final ExifDirectoryType EXIF_DIRECTORY_IFD1 = TIFF_DIRECTORY_IFD1;
+
+ public static final ExifDirectoryType TIFF_DIRECTORY_IFD2 = new ExifDirectoryType.Image(
DIRECTORY_TYPE_DIR_2, "IFD2");
- public static final ExifDirectoryType EXIF_DIRECTORY_INTEROP_IFD = new ExifDirectoryType(
+ public static final ExifDirectoryType EXIF_DIRECTORY_IFD2 = TIFF_DIRECTORY_IFD2;
+
+ public static final ExifDirectoryType TIFF_DIRECTORY_IFD3 = new ExifDirectoryType.Image(
+ DIRECTORY_TYPE_DIR_3, "IFD3");
+ public static final ExifDirectoryType EXIF_DIRECTORY_IFD3 = TIFF_DIRECTORY_IFD3;
+
+ public static final ExifDirectoryType EXIF_DIRECTORY_SUB_IFD = TIFF_DIRECTORY_IFD1;
+ public static final ExifDirectoryType EXIF_DIRECTORY_SUB_IFD1 = TIFF_DIRECTORY_IFD2;
+ public static final ExifDirectoryType EXIF_DIRECTORY_SUB_IFD2 = TIFF_DIRECTORY_IFD3;
+
+ public static final ExifDirectoryType EXIF_DIRECTORY_INTEROP_IFD = new ExifDirectoryType.Special(
DIRECTORY_TYPE_INTEROPERABILITY, "Interop IFD");
- public static final ExifDirectoryType EXIF_DIRECTORY_MAKER_NOTES = new ExifDirectoryType(
+ public static final ExifDirectoryType EXIF_DIRECTORY_MAKER_NOTES = new ExifDirectoryType.Special(
DIRECTORY_TYPE_MAKER_NOTES, "Maker Notes");
- public static final ExifDirectoryType EXIF_DIRECTORY_SUB_IFD = new ExifDirectoryType(
- DIRECTORY_TYPE_SUB, "Sub IFD");
- public static final ExifDirectoryType EXIF_DIRECTORY_SUB_IFD1 = new ExifDirectoryType(
- DIRECTORY_TYPE_SUB1, "Sub IFD1");
- public static final ExifDirectoryType EXIF_DIRECTORY_SUB_IFD2 = new ExifDirectoryType(
- DIRECTORY_TYPE_SUB2, "Sub IFD2");
- public static final ExifDirectoryType EXIF_DIRECTORY_UNKNOWN = null;
- public static final ExifDirectoryType EXIF_DIRECTORY_GPS = new ExifDirectoryType(
+ public static final ExifDirectoryType EXIF_DIRECTORY_EXIF_IFD = new ExifDirectoryType.Special(
+ DIRECTORY_TYPE_EXIF, "Exif IFD");
+ public static final ExifDirectoryType EXIF_DIRECTORY_GPS = new ExifDirectoryType.Special(
DIRECTORY_TYPE_GPS, "GPS IFD");
+ public static final ExifDirectoryType EXIF_DIRECTORY_UNKNOWN = null;
+
public static final ExifDirectoryType EXIF_DIRECTORIES[] = {
TIFF_DIRECTORY_ROOT, EXIF_DIRECTORY_EXIF_IFD, TIFF_DIRECTORY_IFD0,
EXIF_DIRECTORY_IFD0, TIFF_DIRECTORY_IFD1, EXIF_DIRECTORY_IFD1,
@@ -86,8 +117,8 @@
EXIF_DIRECTORY_INTEROP_IFD, EXIF_DIRECTORY_MAKER_NOTES,
EXIF_DIRECTORY_SUB_IFD, EXIF_DIRECTORY_SUB_IFD1,
EXIF_DIRECTORY_SUB_IFD2,
-//EXIF_DIRECTORY_UNKNOWN,
+ //EXIF_DIRECTORY_UNKNOWN,
EXIF_DIRECTORY_GPS,
};
-
+
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffTagConstants.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffTagConstants.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffTagConstants.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffTagConstants.java Tue Jan 22 20:44:55 2008
@@ -301,9 +301,9 @@
// TODO:
// public static final TagInfo2 TIFF_TAG_UNKNOWN = null;
- public static final TagInfo TIFF_TAG_UNKNOWN = new TagInfo("Unknown Tag",
- -1, FIELD_TYPE_DESCRIPTION_UNKNOWN, TagInfo.LENGTH_UNKNOWN,
- EXIF_DIRECTORY_UNKNOWN);
+ public static final TagInfo TIFF_TAG_UNKNOWN = new TagInfo.Unknown(
+ "Unknown Tag", -1, FIELD_TYPE_DESCRIPTION_UNKNOWN,
+ TagInfo.LENGTH_UNKNOWN, EXIF_DIRECTORY_UNKNOWN);
public static final TagInfo ALL_TIFF_TAGS[] = {
TIFF_TAG_NEW_SUBFILE_TYPE, TIFF_TAG_SUBFILE_TYPE,
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReader.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReader.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReader.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReader.java Tue Jan 22 20:44:55 2008
@@ -48,7 +48,7 @@
last = new int[samplesPerPixel];
}
-// public abstract void readImageData(BufferedImage bi, ByteSource byteSource)
+ // public abstract void readImageData(BufferedImage bi, ByteSource byteSource)
public abstract void readImageData(BufferedImage bi)
throws ImageReadException, IOException;
@@ -117,8 +117,7 @@
myLzwDecompressor.setTiffLZWMode();
- byte[] result = myLzwDecompressor
- .decompress(is, expected_size);
+ byte[] result = myLzwDecompressor.decompress(is, expected_size);
return result;
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReaderTiled.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReaderTiled.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReaderTiled.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReaderTiled.java Tue Jan 22 20:44:55 2008
@@ -41,12 +41,10 @@
public DataReaderTiled(PhotometricInterpreter photometricInterpreter,
int tileWidth, int tileLength, int bitsPerPixel,
- int bitsPerSample[], int predictor, int samplesPerPixel,
- int width, int height, int compression,
- TiffImageData.Tiles imageData)
+ int bitsPerSample[], int predictor, int samplesPerPixel, int width,
+ int height, int compression, TiffImageData.Tiles imageData)
{
- super(photometricInterpreter, bitsPerSample, predictor,
- samplesPerPixel);
+ super(photometricInterpreter, bitsPerSample, predictor, samplesPerPixel);
this.tileWidth = tileWidth;
this.tileLength = tileLength;
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java Tue Jan 22 20:44:55 2008
@@ -16,6 +16,7 @@
*/
package org.apache.sanselan.formats.tiff.fieldtypes;
+import org.apache.sanselan.ImageReadException;
import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.common.BinaryFileFunctions;
import org.apache.sanselan.formats.tiff.TiffField;
@@ -40,6 +41,14 @@
return ((length > 0) && ((length * entry.length) <= TIFF_ENTRY_MAX_VALUE_LENGTH));
}
+ public int getBytesLength(TiffField entry) throws ImageReadException
+ {
+ if (length < 1)
+ throw new ImageReadException("Unknown field type");
+
+ return length * entry.length;
+ }
+
// public static final byte[] STUB_LOCAL_VALUE = new byte[TIFF_ENTRY_MAX_VALUE_LENGTH];
public static final byte[] getStubLocalValue()
@@ -52,7 +61,7 @@
return new byte[count * length];
}
- public String getDisplayValue(TiffField entry)
+ public String getDisplayValue(TiffField entry) throws ImageReadException
{
Object o = getSimpleValue(entry);
if (o == null)
@@ -73,7 +82,8 @@
return entry.oversizeValue;
}
- public abstract Object getSimpleValue(TiffField entry);
+ public abstract Object getSimpleValue(TiffField entry)
+ throws ImageReadException;
// public final Object getSimpleValue(TiffField entry)
// {
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeByte.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeByte.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeByte.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeByte.java Tue Jan 22 20:44:55 2008
@@ -16,7 +16,9 @@
*/
package org.apache.sanselan.formats.tiff.fieldtypes;
+import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.formats.tiff.TiffField;
+import org.apache.sanselan.util.Debug;
public class FieldTypeByte extends FieldType
{
@@ -33,13 +35,17 @@
return getRawBytes(entry);
}
- public byte[] writeData(Object o, int byteOrder)
+ public byte[] writeData(Object o, int byteOrder) throws ImageWriteException
{
if (o instanceof Byte)
return new byte[]{
((Byte) o).byteValue(),
};
-
- return (byte[]) o;
+ else if (o instanceof byte[])
+ return (byte[]) o;
+ else
+ throw new ImageWriteException("Invalid data: " + o + " ("
+ + Debug.getType(o) + ")");
}
+
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeDouble.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeDouble.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeDouble.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeDouble.java Tue Jan 22 20:44:55 2008
@@ -18,6 +18,7 @@
import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.formats.tiff.TiffField;
+import org.apache.sanselan.util.Debug;
public class FieldTypeDouble extends FieldType
{
@@ -36,7 +37,22 @@
if (o instanceof Double)
return convertDoubleToByteArray(((Double) o).doubleValue(),
byteOrder);
-
- return convertDoubleArrayToByteArray((double[]) o, byteOrder);
+ else if (o instanceof double[])
+ {
+ double numbers[] = (double[]) o;
+ return convertDoubleArrayToByteArray(numbers, byteOrder);
+ }
+ else if (o instanceof Double[])
+ {
+ Double numbers[] = (Double[]) o;
+ double values[] = new double[numbers.length];
+ for (int i = 0; i < values.length; i++)
+ values[i] = numbers[i].doubleValue();
+ return convertDoubleArrayToByteArray(values, byteOrder);
+ }
+ else
+ throw new ImageWriteException("Invalid data: " + o + " ("
+ + Debug.getType(o) + ")");
}
+
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeFloat.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeFloat.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeFloat.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeFloat.java Tue Jan 22 20:44:55 2008
@@ -18,6 +18,7 @@
import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.formats.tiff.TiffField;
+import org.apache.sanselan.util.Debug;
public class FieldTypeFloat extends FieldType
{
@@ -43,25 +44,22 @@
{
if (o instanceof Float)
return convertFloatToByteArray(((Float) o).floatValue(), byteOrder);
-
- return convertFloatArrayToByteArray((float[]) o, byteOrder);
+ else if (o instanceof float[])
+ {
+ float numbers[] = (float[]) o;
+ return convertFloatArrayToByteArray(numbers, byteOrder);
+ }
+ else if (o instanceof Float[])
+ {
+ Float numbers[] = (Float[]) o;
+ float values[] = new float[numbers.length];
+ for (int i = 0; i < values.length; i++)
+ values[i] = numbers[i].floatValue();
+ return convertFloatArrayToByteArray(values, byteOrder);
+ }
+ else
+ throw new ImageWriteException("Invalid data: " + o + " ("
+ + Debug.getType(o) + ")");
}
-
- // public byte[] writeData(Object o, float byteOrder)
- // {
- // if (o instanceof Float)
- // return writeData(new float[]{
- // ((Float) o).floatValue(),
- // }, byteOrder);
- //
- // return writeData((float[]) o, byteOrder);
- // }
- //
- //
- //
- // public byte[] writeData(float values[], int byteOrder)
- // {
- // return convertIntArrayToByteArray(values, byteOrder);
- // }
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeLong.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeLong.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeLong.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeLong.java Tue Jan 22 20:44:55 2008
@@ -16,7 +16,9 @@
*/
package org.apache.sanselan.formats.tiff.fieldtypes;
+import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.formats.tiff.TiffField;
+import org.apache.sanselan.util.Debug;
public class FieldTypeLong extends FieldType
{
@@ -36,18 +38,28 @@
+ ")", getRawBytes(entry), 0, entry.length, entry.byteOrder);
}
- public byte[] writeData(Object o, int byteOrder)
+ public byte[] writeData(Object o, int byteOrder) throws ImageWriteException
{
if (o instanceof Integer)
- return writeData(new int[]{
+ return convertIntArrayToByteArray(new int[]{
((Integer) o).intValue(),
}, byteOrder);
-
- return writeData((int[]) o, byteOrder);
+ else if (o instanceof int[])
+ {
+ int numbers[] = (int[]) o;
+ return convertIntArrayToByteArray(numbers, byteOrder);
+ }
+ else if (o instanceof Integer[])
+ {
+ Integer numbers[] = (Integer[]) o;
+ int values[] = new int[numbers.length];
+ for (int i = 0; i < values.length; i++)
+ values[i] = numbers[i].intValue();
+ return convertIntArrayToByteArray(values, byteOrder);
+ }
+ else
+ throw new ImageWriteException("Invalid data: " + o + " ("
+ + Debug.getType(o) + ")");
}
- public byte[] writeData(int values[], int byteOrder)
- {
- return convertIntArrayToByteArray(values, byteOrder);
- }
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeRational.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeRational.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeRational.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeRational.java Tue Jan 22 20:44:55 2008
@@ -20,6 +20,7 @@
import org.apache.sanselan.common.RationalNumber;
import org.apache.sanselan.common.RationalNumberUtilities;
import org.apache.sanselan.formats.tiff.TiffField;
+import org.apache.sanselan.util.Debug;
public class FieldTypeRational extends FieldType
{
@@ -42,13 +43,45 @@
{
if (o instanceof RationalNumber)
return convertRationalToByteArray((RationalNumber) o, byteOrder);
+ else if (o instanceof RationalNumber[])
+ {
+ return convertRationalArrayToByteArray((RationalNumber[]) o,
+ byteOrder);
+ }
else if (o instanceof Number)
{
Number number = (Number) o;
- RationalNumber rationalNumber = RationalNumberUtilities.getRationalNumber(number.doubleValue());
+ RationalNumber rationalNumber = RationalNumberUtilities
+ .getRationalNumber(number.doubleValue());
return convertRationalToByteArray(rationalNumber, byteOrder);
}
- return convertRationalArrayToByteArray((RationalNumber[]) o, byteOrder);
+ else if (o instanceof Number[])
+ {
+ Number numbers[] = (Number[]) o;
+ RationalNumber rationalNumbers[] = new RationalNumber[numbers.length];
+ for (int i = 0; i < numbers.length; i++)
+ {
+ Number number = numbers[i];
+ rationalNumbers[i] = RationalNumberUtilities
+ .getRationalNumber(number.doubleValue());
+ }
+ return convertRationalArrayToByteArray(rationalNumbers, byteOrder);
+ }
+ else if (o instanceof double[])
+ {
+ double numbers[] = (double[]) o;
+ RationalNumber rationalNumbers[] = new RationalNumber[numbers.length];
+ for (int i = 0; i < numbers.length; i++)
+ {
+ double number = numbers[i];
+ rationalNumbers[i] = RationalNumberUtilities
+ .getRationalNumber(number);
+ }
+ return convertRationalArrayToByteArray(rationalNumbers, byteOrder);
+ }
+ else
+ throw new ImageWriteException("Invalid data: " + o + " ("
+ + Debug.getType(o) + ")");
}
public byte[] writeData(int numerator, int denominator, int byteOrder)
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeShort.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeShort.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeShort.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeShort.java Tue Jan 22 20:44:55 2008
@@ -16,7 +16,10 @@
*/
package org.apache.sanselan.formats.tiff.fieldtypes;
+import org.apache.sanselan.ImageReadException;
+import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.formats.tiff.TiffField;
+import org.apache.sanselan.util.Debug;
public class FieldTypeShort extends FieldType
{
@@ -39,7 +42,7 @@
// + ")", getRawBytes(entry), 0, entry.length, entry.byteOrder);
// }
- public Object getSimpleValue(TiffField entry)
+ public Object getSimpleValue(TiffField entry) throws ImageReadException
{
if (entry.length == 1)
return new Integer(convertByteArrayToShort(name + " ("
@@ -50,19 +53,28 @@
+ ")", getRawBytes(entry), 0, entry.length, entry.byteOrder);
}
- public byte[] writeData(Object o, int byteOrder)
+ public byte[] writeData(Object o, int byteOrder) throws ImageWriteException
{
if (o instanceof Integer)
- return writeData(new int[]{
+ return convertShortArrayToByteArray(new int[]{
((Integer) o).intValue(),
}, byteOrder);
-
- return writeData((int[]) o, byteOrder);
- }
-
- public byte[] writeData(int values[], int byteOrder)
- {
- return convertShortArrayToByteArray(values, byteOrder);
+ else if (o instanceof int[])
+ {
+ int numbers[] = (int[]) o;
+ return convertShortArrayToByteArray(numbers, byteOrder);
+ }
+ else if (o instanceof Integer[])
+ {
+ Integer numbers[] = (Integer[]) o;
+ int values[] = new int[numbers.length];
+ for (int i = 0; i < values.length; i++)
+ values[i] = numbers[i].intValue();
+ return convertShortArrayToByteArray(values, byteOrder);
+ }
+ else
+ throw new ImageWriteException("Invalid data: " + o + " ("
+ + Debug.getType(o) + ")");
}
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeUnknown.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeUnknown.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeUnknown.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldTypeUnknown.java Tue Jan 22 20:44:55 2008
@@ -16,7 +16,9 @@
*/
package org.apache.sanselan.formats.tiff.fieldtypes;
+import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.formats.tiff.TiffField;
+import org.apache.sanselan.util.Debug;
public class FieldTypeUnknown extends FieldType
{
@@ -27,20 +29,30 @@
public Object getSimpleValue(TiffField entry)
{
+ // Debug.debug("unknown field type. entry", entry.tagInfo.name);
+ // Debug.debug("unknown field type. entry.type", entry.type);
+ // Debug.debug("unknown field type. entry.length", entry.length);
+ // Debug.debug("unknown field type. entry.oversizeValue", entry.oversizeValue);
+ // Debug.debug("unknown field type. entry.isLocalValue()", entry.isLocalValue());
+ // Debug.debug("unknown field type. entry.oversizeValue", entry.oversizeValue);
+
if (entry.length == 1)
return new Byte(entry.valueOffsetBytes[0]);
return getRawBytes(entry);
}
- public byte[] writeData(Object o, int byteOrder)
+ public byte[] writeData(Object o, int byteOrder) throws ImageWriteException
{
if (o instanceof Byte)
return new byte[]{
((Byte) o).byteValue(),
};
-
- return (byte[]) o;
+ else if (o instanceof byte[])
+ return (byte[]) o;
+ else
+ throw new ImageWriteException("Invalid data: " + o + " ("
+ + Debug.getType(o) + ")");
}
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/photometricinterpreters/PhotometricInterpreterBiLevel.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/photometricinterpreters/PhotometricInterpreterBiLevel.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/photometricinterpreters/PhotometricInterpreterBiLevel.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/photometricinterpreters/PhotometricInterpreterBiLevel.java Tue Jan 22 20:44:55 2008
@@ -24,7 +24,8 @@
public class PhotometricInterpreterBiLevel extends PhotometricInterpreter
{
private final boolean invert;
-// private final int bitsPerPixel;
+
+ // private final int bitsPerPixel;
public PhotometricInterpreterBiLevel(int fBitsPerPixel,
int fSamplesPerPixel, int fBitsPerSample[], int Predictor,
@@ -33,7 +34,7 @@
super(fSamplesPerPixel, fBitsPerSample, Predictor, width, height);
this.invert = invert;
-// this.bitsPerPixel = fBitsPerPixel;
+ // this.bitsPerPixel = fBitsPerPixel;
}
public void interpretPixel(BufferedImage bi, int samples[], int x, int y)
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/photometricinterpreters/PhotometricInterpreterLogLUV.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/photometricinterpreters/PhotometricInterpreterLogLUV.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/photometricinterpreters/PhotometricInterpreterLogLUV.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/photometricinterpreters/PhotometricInterpreterLogLUV.java Tue Jan 22 20:44:55 2008
@@ -23,7 +23,7 @@
public class PhotometricInterpreterLogLUV extends PhotometricInterpreter
{
-// private final boolean yOnly;
+ // private final boolean yOnly;
public PhotometricInterpreterLogLUV(int fSamplesPerPixel,
int fBitsPerSample[], int Predictor, int width, int height,
@@ -31,7 +31,7 @@
{
super(fSamplesPerPixel, fBitsPerSample, Predictor, width, height);
-// this.yOnly = yonly;
+ // this.yOnly = yonly;
}
public void dumpstats() throws ImageReadException, IOException
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java Tue Jan 22 20:44:55 2008
@@ -63,9 +63,11 @@
public abstract void write(OutputStream os, TiffOutputSet outputSet)
throws IOException, ImageWriteException;
- protected TiffOutputSummary validateDirectories(List directories)
+ protected TiffOutputSummary validateDirectories(TiffOutputSet outputSet)
throws ImageWriteException
{
+ List directories = outputSet.getDirectories();
+
if (1 > directories.size())
throw new ImageWriteException("No directories.");
@@ -193,6 +195,31 @@
TiffOutputSummary result = new TiffOutputSummary(byteOrder,
rootDirectory, directoryTypeMap);
+ if (interoperabilityDirectory == null
+ && interoperabilityDirectoryOffsetField != null)
+ {
+ // perhaps we should just discard field?
+ throw new ImageWriteException(
+ "Output set has Interoperability Directory Offset field, but no Interoperability Directory");
+ }
+ else if (interoperabilityDirectory != null)
+ {
+ if (exifDirectory == null)
+ {
+ exifDirectory = outputSet.addExifDirectory();
+ }
+
+ if (interoperabilityDirectoryOffsetField == null)
+ {
+ interoperabilityDirectoryOffsetField = TiffOutputField
+ .createOffsetField(EXIF_TAG_INTEROP_OFFSET, byteOrder);
+ exifDirectory.add(interoperabilityDirectoryOffsetField);
+ }
+
+ result.add(interoperabilityDirectory,
+ interoperabilityDirectoryOffsetField);
+ }
+
// make sure offset fields and offset'd directories correspond.
if (exifDirectory == null && exifDirectoryOffsetField != null)
{
@@ -228,26 +255,6 @@
}
result.add(gpsDirectory, gpsDirectoryOffsetField);
- }
-
- if (interoperabilityDirectory == null
- && interoperabilityDirectoryOffsetField != null)
- {
- // perhaps we should just discard field?
- throw new ImageWriteException(
- "Output set has Interoperability Directory Offset field, but no Interoperability Directory");
- }
- else if (interoperabilityDirectory != null)
- {
- if (interoperabilityDirectoryOffsetField == null)
- {
- interoperabilityDirectoryOffsetField = TiffOutputField
- .createOffsetField(EXIF_TAG_INTEROP_OFFSET, byteOrder);
- rootDirectory.add(interoperabilityDirectoryOffsetField);
- }
-
- result.add(interoperabilityDirectory,
- interoperabilityDirectoryOffsetField);
}
return result;
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterLossless.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterLossless.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterLossless.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterLossless.java Tue Jan 22 20:44:55 2008
@@ -218,7 +218,7 @@
else if (analysis.size() == 1)
{
TiffElement onlyElement = (TiffElement) analysis.get(0);
-// Debug.debug("onlyElement", onlyElement.getElementDescription());
+ // Debug.debug("onlyElement", onlyElement.getElementDescription());
if (onlyElement.offset == TIFF_HEADER_SIZE
&& onlyElement.offset + onlyElement.length
+ TIFF_HEADER_SIZE == oldLength)
@@ -232,14 +232,14 @@
// if (true)
// throw new ImageWriteException("hahah");
- List directories = outputSet.getDirectories();
+ // List directories = outputSet.getDirectories();
- TiffOutputSummary outputSummary = validateDirectories(directories);
+ TiffOutputSummary outputSummary = validateDirectories(outputSet);
List outputItems = outputSet.getOutputItems(outputSummary);
int outputLength = updateOffsetsStep(analysis, outputItems);
-// Debug.debug("outputLength", outputLength);
+ // Debug.debug("outputLength", outputLength);
outputSummary.updateOffsets(byteOrder);
@@ -311,9 +311,9 @@
TiffOutputItem outputItem = (TiffOutputItem) unplacedItems
.remove(0);
int outputItemLength = outputItem.getItemLength();
-// Debug.debug("largest unplaced item: "
-// + outputItem.getItemDescription() + " (" + outputItemLength
-// + ")");
+ // Debug.debug("largest unplaced item: "
+ // + outputItem.getItemDescription() + " (" + outputItemLength
+ // + ")");
// search for the smallest possible element large enough to hold the item.
TiffElement bestFit = null;
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterLossy.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterLossy.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterLossy.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterLossy.java Tue Jan 22 20:44:55 2008
@@ -38,9 +38,9 @@
public void write(OutputStream os, TiffOutputSet outputSet)
throws IOException, ImageWriteException
{
- List directories = outputSet.getDirectories();
+ // List directories = outputSet.getDirectories();
- TiffOutputSummary outputSummary = validateDirectories(directories);
+ TiffOutputSummary outputSummary = validateDirectories(outputSet);
List outputItems = outputSet.getOutputItems(outputSummary);
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputDirectory.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputDirectory.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputDirectory.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputDirectory.java Tue Jan 22 20:44:55 2008
@@ -25,9 +25,9 @@
import org.apache.sanselan.ImageWriteException;
import org.apache.sanselan.common.BinaryOutputStream;
import org.apache.sanselan.formats.tiff.JpegImageData;
+import org.apache.sanselan.formats.tiff.TiffDirectory;
import org.apache.sanselan.formats.tiff.TiffElement;
import org.apache.sanselan.formats.tiff.TiffImageData;
-import org.apache.sanselan.formats.tiff.TiffDirectory;
import org.apache.sanselan.formats.tiff.constants.TagConstantsUtils;
import org.apache.sanselan.formats.tiff.constants.TagInfo;
import org.apache.sanselan.formats.tiff.constants.TiffConstants;
@@ -104,7 +104,9 @@
TiffOutputField e1 = (TiffOutputField) o1;
TiffOutputField e2 = (TiffOutputField) o2;
- return e1.tag - e2.tag;
+ if (e1.tag != e2.tag)
+ return e1.tag - e2.tag;
+ return e1.getSortHint() - e2.getSortHint();
}
};
Collections.sort(fields, comparator);
@@ -188,6 +190,7 @@
}
protected List getOutputItems(TiffOutputSummary outputSummary)
+ throws ImageWriteException
{
// first validate directory fields.
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java Tue Jan 22 20:44:55 2008
@@ -31,7 +31,7 @@
public final FieldType fieldType;
public final int count;
- public byte bytes[];
+ private byte bytes[];
private final TiffOutputItem separateValueItem;
@@ -59,6 +59,9 @@
separateValueItem = new TiffOutputItem.Value(name, bytes);
}
}
+
+ private int sortHint = -1;
+
public static TiffOutputField create(TagInfo tagInfo, int byteOrder,
Number number) throws ImageWriteException
@@ -76,7 +79,7 @@
}
protected static final TiffOutputField createOffsetField(TagInfo tagInfo,
- int byteOrder)
+ int byteOrder) throws ImageWriteException
{
return new TiffOutputField(tagInfo, FIELD_TYPE_LONG, 1, FIELD_TYPE_LONG
.writeData(new int[]{
@@ -87,6 +90,19 @@
protected void writeField(BinaryOutputStream bos) throws IOException,
ImageWriteException
{
+// CachingOutputStream cos = null;
+// if (tagInfo.isUnknown())
+// {
+// cos = new CachingOutputStream(bos);
+// int byteOrder = bos.getByteOrder();
+// bos = new BinaryOutputStream(cos, byteOrder);
+//
+// Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
+// + ") isLocalValue()", isLocalValue());
+// Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
+// + ") bytes", bytes);
+// }
+
bos.write2Bytes(tag);
bos.write2Bytes(fieldType.type);
bos.write4Bytes(count);
@@ -112,6 +128,11 @@
if ((written % 2) != 0)
written++;
}
+// if (null != cos)
+// {
+// Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
+// + ") written field", cos.getCache());
+// }
}
protected TiffOutputItem getSeperateValue()
@@ -126,6 +147,10 @@
protected void setData(byte bytes[]) throws ImageWriteException
{
+// if(tagInfo.isUnknown())
+// Debug.debug("unknown tag(0x" + Integer.toHexString(tag)
+// + ") setData", bytes);
+
if (this.bytes.length != bytes.length)
throw new ImageWriteException("Cannot change size of value.");
@@ -162,5 +187,15 @@
result.append(newline);
return result.toString();
+ }
+
+ public int getSortHint()
+ {
+ return sortHint;
+ }
+
+ public void setSortHint(int sortHint)
+ {
+ this.sortHint = sortHint;
}
}
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputItem.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputItem.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputItem.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputItem.java Tue Jan 22 20:44:55 2008
@@ -22,7 +22,7 @@
import org.apache.sanselan.common.BinaryOutputStream;
import org.apache.sanselan.formats.tiff.constants.AllTagConstants;
- abstract class TiffOutputItem implements AllTagConstants
+abstract class TiffOutputItem implements AllTagConstants
{
public static final int UNDEFINED_VALUE = -1;
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java Tue Jan 22 20:44:55 2008
@@ -36,6 +36,7 @@
}
protected List getOutputItems(TiffOutputSummary outputSummary)
+ throws ImageWriteException
{
List result = new ArrayList();
@@ -164,6 +165,8 @@
public TiffOutputDirectory addInteroperabilityDirectory()
throws ImageWriteException
{
+ getOrCreateExifDirectory();
+
TiffOutputDirectory result = new TiffOutputDirectory(
DIRECTORY_TYPE_INTEROPERABILITY);
addDirectory(result);
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSummary.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSummary.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSummary.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSummary.java Tue Jan 22 20:44:55 2008
@@ -73,7 +73,8 @@
for (int i = 0; i < imageDataItems.size(); i++)
{
- ImageDataOffsets imageDataInfo = (ImageDataOffsets) imageDataItems.get(i);
+ ImageDataOffsets imageDataInfo = (ImageDataOffsets) imageDataItems
+ .get(i);
for (int j = 0; j < imageDataInfo.outputItems.length; j++)
{
Added: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/CachingOutputStream.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/CachingOutputStream.java?rev=614420&view=auto
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/CachingOutputStream.java (added)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/CachingOutputStream.java Tue Jan 22 20:44:55 2008
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sanselan.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+public class CachingOutputStream extends OutputStream
+{
+ private final OutputStream os;
+ private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ public CachingOutputStream(OutputStream os)
+ {
+ this.os = os;
+ }
+
+ public void write(int b) throws IOException
+ {
+ os.write(b);
+ baos.write(b);
+ }
+
+ public byte[] getCache()
+ {
+ return baos.toByteArray();
+ }
+
+ public void close() throws IOException
+ {
+ os.close();
+ }
+
+ public void flush() throws IOException
+ {
+ os.flush();
+ }
+
+}
Propchange: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/CachingOutputStream.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java Tue Jan 22 20:44:55 2008
@@ -889,4 +889,21 @@
}
}
+
+ public static final void purgeMemory()
+ {
+ try
+ {
+ // Thread.sleep(50);
+ System.runFinalization();
+ Thread.sleep(50);
+ System.gc();
+ Thread.sleep(50);
+ }
+ catch (Throwable e)
+ {
+ Debug.debug(e);
+ }
+ }
+
}
Propchange: incubator/sanselan/trunk/src/test/data/images/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Jan 22 20:44:55 2008
@@ -0,0 +1,2 @@
+exif
+ignore
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java Tue Jan 22 20:44:55 2008
@@ -28,11 +28,13 @@
import org.apache.sanselan.util.Debug;
public abstract class SanselanTest extends TestCase
+ implements
+ SanselanConstants
{
- public SanselanTest(String name)
- {
- super(name);
- }
+ // public SanselanTest(String name)
+ // {
+ // super(name);
+ // }
public void compareByteArrays(byte a[], byte b[])
{
@@ -56,13 +58,29 @@
}
}
+ private static final File PHIL_HARVEY_TEST_IMAGE_FOLDER = new File(
+ "src\\test\\data\\images\\exif\\philHarvey\\");
+
+ protected boolean isPhilHarveyTestImage(File file)
+ {
+ // Debug.debug("isPhilHarveyTestImage file", file.getAbsolutePath());
+ // Debug.debug("isPhilHarveyTestImage folder", PHIL_HARVEY_TEST_IMAGE_FOLDER.getAbsolutePath());
+ return file.getAbsolutePath().startsWith(
+ PHIL_HARVEY_TEST_IMAGE_FOLDER.getAbsolutePath());
+ }
+
protected List getAllTestImages()
{
- File srcFolder = new File(".", "src");
+ File srcFolder = new File("src");
File testFolder = new File(srcFolder, "test");
File dataFolder = new File(testFolder, "data");
File imagesFolder = new File(dataFolder, "images");
+// imagesFolder = new File(
+ // "src\\test\\data\\images\\exif\\drewNoakes\\");
+ // "src\\test\\data\\images\\exif\\drewNoakes\\007_Canon EOS 20D (1).jpg");
+//"src\\test\\data\\images\\tiff\\");
+
assertTrue(imagesFolder.exists());
final List result = new ArrayList();
@@ -94,16 +112,27 @@
protected File getTestImage(ImageFilter filter) throws IOException,
ImageReadException
{
- List images = getTestImages(filter);
+ List images = getTestImages(filter, 1);
assertTrue(images.size() > 0);
return (File) images.get(0);
}
+ protected List getTestImages() throws IOException, ImageReadException
+ {
+ return getTestImages(null, -1);
+ }
+
protected List getTestImages(ImageFilter filter) throws IOException,
ImageReadException
{
+ return getTestImages(filter, -1);
+ }
+
+ protected List getTestImages(ImageFilter filter, int max)
+ throws IOException, ImageReadException
+ {
List images = getAllTestImages();
if (filter != null)
@@ -111,9 +140,20 @@
List filtered = new ArrayList();
for (int i = 0; i < images.size(); i++)
{
+ Debug.purgeMemory();
+
File file = (File) images.get(i);
+
+ if (file.getParentFile().getName().toLowerCase().equals(
+ "@broken"))
+ continue;
+
if (filter.accept(file))
+ {
filtered.add(file);
+ if (max > 0 && filtered.size() >= max)
+ return filtered;
+ }
}
images = filtered;
}
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/RationalNumberTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/RationalNumberTest.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/RationalNumberTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/RationalNumberTest.java Tue Jan 22 20:44:55 2008
@@ -25,10 +25,10 @@
public class RationalNumberTest extends SanselanTest
{
- public RationalNumberTest()
- {
- super("Rational Number Test");
- }
+ // public RationalNumberTest()
+ // {
+ // super("Rational Number Test");
+ // }
public void test()
{
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceDataTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceDataTest.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceDataTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceDataTest.java Tue Jan 22 20:44:55 2008
@@ -30,10 +30,10 @@
public class ByteSourceDataTest extends ByteSourceTest
{
- public ByteSourceDataTest()
- {
- super(ByteSourceDataTest.class.getName());
- }
+ // public ByteSourceDataTest()
+ // {
+ // super(ByteSourceDataTest.class.getName());
+ // }
/**
* @return the suite of tests being tested
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java Tue Jan 22 20:44:55 2008
@@ -24,6 +24,9 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -37,10 +40,10 @@
public class ByteSourceImageTest extends ByteSourceTest
{
- public ByteSourceImageTest()
- {
- super(ByteSourceImageTest.class.getName());
- }
+ // public ByteSourceImageTest()
+ // {
+ // super(ByteSourceImageTest.class.getName());
+ // }
/**
* @return the suite of tests being tested
@@ -54,23 +57,42 @@
IllegalAccessException, IllegalArgumentException,
InvocationTargetException
{
- File imageFile = getTestImage();
- Debug.debug("imageFile", imageFile);
- assertTrue(imageFile != null);
-
- byte imageFileBytes[] = IOUtils.getFileBytes(imageFile);
- assertTrue(imageFileBytes != null);
- assertTrue(imageFileBytes.length == imageFile.length());
-
- checkGuessFormat(imageFile, imageFileBytes);
-
- checkGetICCProfileBytes(imageFile, imageFileBytes);
-
- checkGetImageInfo(imageFile, imageFileBytes);
-
- checkGetImageSize(imageFile, imageFileBytes);
-
- checkGetBufferedImage(imageFile, imageFileBytes);
+ List imageFiles = getTestImages();
+ for (int i = 0; i < imageFiles.size(); i++)
+ {
+ Debug.purgeMemory();
+
+ File imageFile = (File) imageFiles.get(i);
+ Debug.debug("imageFile", imageFile);
+ assertTrue(imageFile != null);
+
+ byte imageFileBytes[] = IOUtils.getFileBytes(imageFile);
+ assertTrue(imageFileBytes != null);
+ assertTrue(imageFileBytes.length == imageFile.length());
+
+ checkGuessFormat(imageFile, imageFileBytes);
+
+ if (imageFile.getName().toLowerCase().endsWith(".png")
+ && imageFile.getParentFile().getName().equalsIgnoreCase(
+ "pngsuite")
+ && imageFile.getName().toLowerCase().startsWith("x"))
+ continue;
+
+ checkGetICCProfileBytes(imageFile, imageFileBytes);
+
+ if (!imageFile.getParentFile().getName().toLowerCase().equals(
+ "@broken"))
+ checkGetImageInfo(imageFile, imageFileBytes);
+
+ checkGetImageSize(imageFile, imageFileBytes);
+
+ ImageFormat imageFormat = Sanselan.guessFormat(imageFile);
+ if (ImageFormat.IMAGE_FORMAT_JPEG == imageFormat
+ || ImageFormat.IMAGE_FORMAT_UNKNOWN == imageFormat)
+ ;
+ else
+ checkGetBufferedImage(imageFile, imageFileBytes);
+ }
}
public void checkGetBufferedImage(File file, byte[] bytes)
@@ -139,9 +161,15 @@
IllegalArgumentException, InvocationTargetException
{
// check guessFormat()
- ImageInfo imageInfoFile = Sanselan.getImageInfo(imageFile);
- ImageInfo imageInfoBytes = Sanselan.getImageInfo(imageFileBytes);
+ Map params = new HashMap();
+ boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+ params.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(!ignoreImageData));
+
+ ImageInfo imageInfoFile = Sanselan.getImageInfo(imageFile, params);
+
+ ImageInfo imageInfoBytes = Sanselan
+ .getImageInfo(imageFileBytes, params);
assertTrue(imageInfoFile != null);
assertTrue(imageInfoBytes != null);
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceTest.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceTest.java Tue Jan 22 20:44:55 2008
@@ -28,10 +28,10 @@
public abstract class ByteSourceTest extends SanselanTest
{
- public ByteSourceTest(String name)
- {
- super(name);
- }
+ // public ByteSourceTest(String name)
+ // {
+ // super(name);
+ // }
protected File createTempFile(byte src[]) throws IOException
{
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java Tue Jan 22 20:44:55 2008
@@ -28,10 +28,10 @@
public abstract class JpegBaseTest extends SanselanTest
{
- public JpegBaseTest(String name)
- {
- super(name);
- }
+ // public JpegBaseTest(String name)
+ // {
+ // super(name);
+ // }
protected static boolean isJpeg(File file) throws IOException,
ImageReadException
@@ -48,10 +48,10 @@
}
};
- protected File getJpegImage() throws IOException, ImageReadException
- {
- return getTestImage(imageFilter);
- }
+ // protected File getJpegImage() throws IOException, ImageReadException
+ // {
+ // return getTestImage(imageFilter);
+ // }
protected List getJpegImages() throws IOException, ImageReadException
{
Modified: incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java?rev=614420&r1=614419&r2=614420&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java (original)
+++ incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java Tue Jan 22 20:44:55 2008
@@ -19,7 +19,9 @@
import java.io.File;
import java.io.IOException;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.sanselan.ImageInfo;
import org.apache.sanselan.ImageReadException;
@@ -30,10 +32,6 @@
public class JpegReadTest extends JpegBaseTest
{
- public JpegReadTest(String name)
- {
- super(name);
- }
public void test() throws IOException, ImageReadException,
ImageWriteException
@@ -41,13 +39,24 @@
List images = getJpegImages();
for (int i = 0; i < images.size(); i++)
{
+ Debug.purgeMemory();
+
File imageFile = (File) images.get(i);
Debug.debug("imageFile", imageFile.getAbsoluteFile());
- IImageMetadata metadata = Sanselan.getMetadata(imageFile);
- assertNotNull(metadata);
+ // ByteSource byteSource = new ByteSourceFile(imageFile);
+ // new JpegUtils().dumpJFIF(byteSource);
+
+ Map params = new HashMap();
+ boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
+ params
+ .put(PARAM_KEY_READ_THUMBNAILS, new Boolean(
+ !ignoreImageData));
+
+ IImageMetadata metadata = Sanselan.getMetadata(imageFile, params);
+ // assertNotNull(metadata);
- ImageInfo imageInfo = Sanselan.getImageInfo(imageFile);
+ ImageInfo imageInfo = Sanselan.getImageInfo(imageFile, params);
assertNotNull(imageInfo);
}
}