Package com.aowagie.text.pdf.codec
Class TIFFDirectory
- java.lang.Object
-
- com.aowagie.text.pdf.codec.TIFFDirectory
-
- All Implemented Interfaces:
java.io.Serializable
class TIFFDirectory extends java.lang.Object implements java.io.Serializable
A class representing an Image File Directory (IFD) from a TIFF 6.0 stream. The TIFF file format is described in more detail in the comments for the TIFFDescriptor class.A TIFF IFD consists of a set of TIFFField tags. Methods are provided to query the set of tags and to obtain the raw field array. In addition, convenience methods are provided for acquiring the values of tags that contain a single value that fits into a byte, int, long, float, or double.
Every TIFF file is made up of one or more public IFDs that are joined in a linked list, rooted in the file header. A file may also contain so-called private IFDs that are referenced from tag data and do not appear in the main list.
This class is not a committed part of the JAI API. It may be removed or changed in future releases of JAI.
- See Also:
TIFFField
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Hashtable
fieldIndex
A Hashtable indexing the fields by tag number.private TIFFField[]
fields
An array of TIFFFields.private long
IFDOffset
The offset of this IFD.private boolean
isBigEndian
A boolean storing the endianness of the stream.private long
nextIFDOffset
The offset of the next IFD.private int
numEntries
The number of entries in the IFD.private static long
serialVersionUID
private static int[]
sizeOfType
-
Constructor Summary
Constructors Constructor Description TIFFDirectory()
The default constructor.TIFFDirectory(RandomAccessFileOrArray stream, int directory)
Constructs a TIFFDirectory from a SeekableStream.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) TIFFField
getField(int tag)
Returns the value of a given tag as a TIFFField, or null if the tag is not present.private byte
getFieldAsByte(int tag, int index)
Returns the value of a particular index of a given tag as a byte.private double
getFieldAsDouble(int tag, int index)
Returns the value of a particular index of a given tag as a double.private float
getFieldAsFloat(int tag, int index)
Returns the value of a particular index of a given tag as a float.(package private) long
getFieldAsLong(int tag)
Returns the value of index 0 of a given tag as a long.private long
getFieldAsLong(int tag, int index)
Returns the value of a particular index of a given tag as a long.TIFFField[]
getFields()
Returns an array of TIFFFields containing all the fields in this directory.long
getIFDOffset()
Returns the offset of the IFD corresponding to thisTIFFDirectory
.long
getNextIFDOffset()
Returns the offset of the next IFD after the IFD corresponding to thisTIFFDirectory
.int
getNumEntries()
Returns the number of directory entries.int[]
getTags()
Returns an ordered array of ints indicating the tag values.private void
initialize(RandomAccessFileOrArray stream)
boolean
isBigEndian()
Returns a boolean indicating whether the byte order used in the the TIFF file is big-endian (i.e.(package private) boolean
isTagPresent(int tag)
Returns true if a tag appears in the directory.private static boolean
isValidEndianTag(int endian)
private double
readDouble(RandomAccessFileOrArray stream)
private float
readFloat(RandomAccessFileOrArray stream)
private int
readInt(RandomAccessFileOrArray stream)
private long
readLong(RandomAccessFileOrArray stream)
private short
readShort(RandomAccessFileOrArray stream)
private long
readUnsignedInt(RandomAccessFileOrArray stream)
private static long
readUnsignedInt(RandomAccessFileOrArray stream, boolean isBigEndian)
private int
readUnsignedShort(RandomAccessFileOrArray stream)
private static int
readUnsignedShort(RandomAccessFileOrArray stream, boolean isBigEndian)
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
isBigEndian
private boolean isBigEndian
A boolean storing the endianness of the stream.
-
numEntries
private int numEntries
The number of entries in the IFD.
-
fields
private TIFFField[] fields
An array of TIFFFields.
-
fieldIndex
private final java.util.Hashtable fieldIndex
A Hashtable indexing the fields by tag number.
-
IFDOffset
private long IFDOffset
The offset of this IFD.
-
nextIFDOffset
private long nextIFDOffset
The offset of the next IFD.
-
sizeOfType
private static final int[] sizeOfType
-
-
Constructor Detail
-
TIFFDirectory
TIFFDirectory()
The default constructor.
-
TIFFDirectory
TIFFDirectory(RandomAccessFileOrArray stream, int directory) throws java.io.IOException
Constructs a TIFFDirectory from a SeekableStream. The directory parameter specifies which directory to read from the linked list present in the stream; directory 0 is normally read but it is possible to store multiple images in a single TIFF file by maintaining multiple directories.- Parameters:
stream
- a SeekableStream to read from.directory
- the index of the directory to read.- Throws:
java.io.IOException
-
-
Method Detail
-
isValidEndianTag
private static boolean isValidEndianTag(int endian)
-
initialize
private void initialize(RandomAccessFileOrArray stream) throws java.io.IOException
- Throws:
java.io.IOException
-
getNumEntries
public int getNumEntries()
Returns the number of directory entries.
-
getField
TIFFField getField(int tag)
Returns the value of a given tag as a TIFFField, or null if the tag is not present.
-
isTagPresent
boolean isTagPresent(int tag)
Returns true if a tag appears in the directory.
-
getTags
public int[] getTags()
Returns an ordered array of ints indicating the tag values.
-
getFields
public TIFFField[] getFields()
Returns an array of TIFFFields containing all the fields in this directory.
-
getFieldAsByte
private byte getFieldAsByte(int tag, int index)
Returns the value of a particular index of a given tag as a byte. The caller is responsible for ensuring that the tag is present and has type TIFFField.TIFF_SBYTE, TIFF_BYTE, or TIFF_UNDEFINED.
-
getFieldAsLong
private long getFieldAsLong(int tag, int index)
Returns the value of a particular index of a given tag as a long. The caller is responsible for ensuring that the tag is present and has type TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED, TIFF_SHORT, TIFF_SSHORT, TIFF_SLONG or TIFF_LONG.
-
getFieldAsLong
long getFieldAsLong(int tag)
Returns the value of index 0 of a given tag as a long. The caller is responsible for ensuring that the tag is present and has type TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED, TIFF_SHORT, TIFF_SSHORT, TIFF_SLONG or TIFF_LONG.
-
getFieldAsFloat
private float getFieldAsFloat(int tag, int index)
Returns the value of a particular index of a given tag as a float. The caller is responsible for ensuring that the tag is present and has numeric type (all but TIFF_UNDEFINED and TIFF_ASCII).
-
getFieldAsDouble
private double getFieldAsDouble(int tag, int index)
Returns the value of a particular index of a given tag as a double. The caller is responsible for ensuring that the tag is present and has numeric type (all but TIFF_UNDEFINED and TIFF_ASCII).
-
readShort
private short readShort(RandomAccessFileOrArray stream) throws java.io.IOException
- Throws:
java.io.IOException
-
readUnsignedShort
private int readUnsignedShort(RandomAccessFileOrArray stream) throws java.io.IOException
- Throws:
java.io.IOException
-
readInt
private int readInt(RandomAccessFileOrArray stream) throws java.io.IOException
- Throws:
java.io.IOException
-
readUnsignedInt
private long readUnsignedInt(RandomAccessFileOrArray stream) throws java.io.IOException
- Throws:
java.io.IOException
-
readLong
private long readLong(RandomAccessFileOrArray stream) throws java.io.IOException
- Throws:
java.io.IOException
-
readFloat
private float readFloat(RandomAccessFileOrArray stream) throws java.io.IOException
- Throws:
java.io.IOException
-
readDouble
private double readDouble(RandomAccessFileOrArray stream) throws java.io.IOException
- Throws:
java.io.IOException
-
readUnsignedShort
private static int readUnsignedShort(RandomAccessFileOrArray stream, boolean isBigEndian) throws java.io.IOException
- Throws:
java.io.IOException
-
readUnsignedInt
private static long readUnsignedInt(RandomAccessFileOrArray stream, boolean isBigEndian) throws java.io.IOException
- Throws:
java.io.IOException
-
isBigEndian
public boolean isBigEndian()
Returns a boolean indicating whether the byte order used in the the TIFF file is big-endian (i.e. whether the byte order is from the most significant to the least significant)
-
getIFDOffset
public long getIFDOffset()
Returns the offset of the IFD corresponding to thisTIFFDirectory
.
-
getNextIFDOffset
public long getNextIFDOffset()
Returns the offset of the next IFD after the IFD corresponding to thisTIFFDirectory
.
-
-