The TIFF format consists of a short header that points to a
linked list of Image File Directories (IFDs). An IFD is
essentially a list of fields. The TIFFDirectory class
encapsulates a set of common operations performed on an IFD; an instance
of the TIFFField class corresponds to a field in an IFD.
Each field has numeric value or tag, a data type, and a byte offset
at which the field's data may be found. This mechanism allows TIFF
files to contain multiple images, each with its own IFD, and to order
its contents flexibly since (apart from the header) nothing is required to
appear at a fixed offset.

An image generated by the "TIFF" operation will have a property
named "tiff_directory" the value of which will be a TIFFDirectory
corresponding to the IFD of the image. JAI's property inheritance mechanism
provides a mechanism by which the field information of the IFD may be
made available to applications in a straightforward way. This mechanism
may be utilized by setting a PropertyGenerator on this
OperationDescriptor which extracts TIFFFields
from the TIFFDirectory-valued property and returns them either
as TIFFField instances or as some user-defined object
initialized from a TIFFField. In the latter case application
code would be insulated from the uncommitted TIFFField class.

The second parameter contains an instance of
TIFFDecodeParam to be used during the decoding.
It may be set to null in order to perform default
decoding, or equivalently may be omitted.

Some TIFF extensions make use of a mechanism known as "private
IFDs." A private IFD is one that is not referenced by the standard
linked list of IFDs that starts in the file header. To a standard
TIFF reader, it appears as an unreferenced area in the file.
However, the byte offset of the private IFD is stored as the value
of a private tag, allowing readers that understand the tag to
locate and interpret the IFD. The "TIFF" operation may read the data
at an arbitrary IFD by supplying the offset of the IFD via the
setIFDOffset() method of the TIFFDecodeParam
parameter.

The third parameter specifies which page of the TIFF data to
read. This permits loading of multi-page TIFF files. The value
provided is zero-relative and so may be interpreted as the index
of the IFD after the first IFD in the stream with zero of course
indicating the first IFD. The default value is zero.

All pages of a multi-page TIFF stream may also be read by doing the
following: