Class 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 Detail

      • 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 this TIFFDirectory.
      • getNextIFDOffset

        public long getNextIFDOffset()
        Returns the offset of the next IFD after the IFD corresponding to this TIFFDirectory.