Package org.libtiff.jai.codec
Class XTIFFDirectory
- java.lang.Object
-
- org.libtiff.jai.codec.XTIFFDirectory
-
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
GeoTIFFDirectory
public class XTIFFDirectory extends Object implements Serializable
XTIFFDirectory is an extensible TIFF directory object. This class may be extended without changing the XTIFF codec by overriding the XTIFFFactory instance registered in this class. In addition, this class is the repository of all XTIFFTileCodec's which may be augmented with new codecs, again without overriding the ImageCodec. If the jai "tiff" codec has been overridden through theXTIFFDescriptor.register()method, each XTIFF image will possess a property called "tiff.directory" which will be an object of the type created by the factory. The class is declared as serializable to permit its transmission to remote images as a set of parameters to the codec, and to be able to survive as an instantiated property of the RenderedImage.- Author:
- Niles Ritter
- See Also:
XTIFFDescriptor,XTIFFField,XTIFFTileCodec,XTIFFFactory, Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected static XTIFFFactoryfactorydefault directory factoryprotected com.sun.media.jai.codec.SeekableStreamstreamThe stream being read.protected static HashtabletileCodecs
-
Constructor Summary
Constructors Modifier Constructor Description XTIFFDirectory()The default constructor.protectedXTIFFDirectory(com.sun.media.jai.codec.SeekableStream stream, int directory)Constructs a XTIFFDirectory from a SeekableStream.protectedXTIFFDirectory(com.sun.media.jai.codec.SeekableStream stream, long ifd_offset)Constructs a XTIFFDirectory by reading a SeekableStream.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddField(int tag, int type, int count, Object obj)Create and add a TIFF field to this directory.voidaddField(XTIFFField field)Add an existing TIFF field to this directory.static XTIFFDirectorycreate()Constructs an XTIFFDirectory from the currently.static XTIFFDirectorycreate(com.sun.media.jai.codec.SeekableStream stream, int directory)Constructs a XTIFFDirectory from a SeekableStream.static XTIFFDirectorycreate(com.sun.media.jai.codec.SeekableStream stream, long ifd_offset)Constructs a TIFFDirectory by reading a SeekableStream.static XTIFFFieldcreateField(int tag, int type, int count, Object obj)Create a TIFF fieldXTIFFTileCodeccreateTileCodec(XTIFFDecodeParam param)Constructs a tile codec for decoding data, using the compression defined in the current directory.XTIFFTileCodeccreateTileCodec(XTIFFEncodeParam param)Constructs a tile codec for encoding data, using the compression defined in the current directory.intgetCompression()Return the type of compression indicated in the TIFF fields, or XTIFF.COMPRESSION_NON if not specified.XTIFFFieldgetField(int tag)Returns the value of a given tag as a XTIFFField, or null if the tag is not present.bytegetFieldAsByte(int tag)Returns the value of index 0 of a given tag as a byte.bytegetFieldAsByte(int tag, int index)Returns the value of a particular index of a given tag as a byte.doublegetFieldAsDouble(int tag)Returns the value of index 0 of a given tag as a double.doublegetFieldAsDouble(int tag, int index)Returns the value of a particular index of a given tag as a double.floatgetFieldAsFloat(int tag)Returns the value of index 0 of a given tag as a float.floatgetFieldAsFloat(int tag, int index)Returns the value of a particular index of a given tag as a float.longgetFieldAsLong(int tag)Returns the value of index 0 of a given tag as a long.longgetFieldAsLong(int tag, int index)Returns the value of a particular index of a given tag as a long.XTIFFField[]getFields()Returns an array of XTIFFFields containing all the fields in this directory.intgetImageType()Get the JAI Image decoded type.static intgetNumDirectories(com.sun.media.jai.codec.SeekableStream stream)Returns the number of image directories (subimages) stored in a given TIFF file, represented by aSeekableStream.intgetNumEntries()Returns the number of directory entries.int[]getTags()Returns an ordered array of ints indicating the tag values.static XTIFFTileCodecgetTileCodec(int comp)Return the currently registered XTIFFTileCodec for this compression type.protected voidinitialize()Initialize the directory from a streambooleanisBigEndian()Returns a boolean indicating whether the byte order used in the the TIFF file is big-endian (i.e.booleanisTagPresent(int tag)Returns true if a tag appears in the directory.booleanisTiled()If true this image uses TIFF 6.0 tilingprotected doublereadDouble(com.sun.media.jai.codec.SeekableStream stream)ObjectreadFieldValue(int tag, int type, int count)TIFF field-value reader.protected floatreadFloat(com.sun.media.jai.codec.SeekableStream stream)protected voidreadHeader()reads the TIFF header.protected intreadInt(com.sun.media.jai.codec.SeekableStream stream)protected longreadLong(com.sun.media.jai.codec.SeekableStream stream)protected shortreadShort(com.sun.media.jai.codec.SeekableStream stream)protected longreadUnsignedInt(com.sun.media.jai.codec.SeekableStream stream)protected intreadUnsignedShort(com.sun.media.jai.codec.SeekableStream stream)static voidregisterTileCodec(int comp, XTIFFTileCodec codec)Register a new XTIFFTileCodec for encoding and decoding compressed TIFF image data.voidsetCompression(int compression)Specifies the type of compression to be used.static voidsetFactory(XTIFFFactory fact)Set the XTIFFFactory, which is used to construct the XTIFFDirectory object assigned as a "tiff.directory" property in the resulting jai image.voidsetImageType(int image_type)Set the JAI Image decoded type.voidsetIsTiled(boolean isTiled)If set, the data will be written out in tiled format, instead of in strips.intsizeOfType(int type)Return the size of a data type.static voidunRegisterTileCodec(int comp)UnRegister the XTIFFTileCodec corresponding to the TIFF compression type.
-
-
-
Field Detail
-
factory
protected static XTIFFFactory factory
default directory factory
-
tileCodecs
protected static Hashtable tileCodecs
-
stream
protected transient com.sun.media.jai.codec.SeekableStream stream
The stream being read. Not persisted
-
-
Constructor Detail
-
XTIFFDirectory
public XTIFFDirectory()
The default constructor. Publicized for Serializability
-
XTIFFDirectory
protected XTIFFDirectory(com.sun.media.jai.codec.SeekableStream stream, int directory) throws IOExceptionConstructs a XTIFFDirectory 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 maintaing multiple directories.- Parameters:
stream- a SeekableStream to read from.directory- the index of the directory to read.- Throws:
IOException
-
XTIFFDirectory
protected XTIFFDirectory(com.sun.media.jai.codec.SeekableStream stream, long ifd_offset) throws IOExceptionConstructs a XTIFFDirectory by reading a SeekableStream. The ifd_offset parameter specifies the stream offset from which to begin reading; this mechanism is sometimes used to store private IFDs within a TIFF file that are not part of the normal sequence of IFDs.- Parameters:
stream- a SeekableStream to read from.ifd_offset- the long byte offset of the directory.- Throws:
IOException
-
-
Method Detail
-
isTiled
public boolean isTiled()
If true this image uses TIFF 6.0 tiling
-
readHeader
protected void readHeader() throws IOExceptionreads the TIFF header. Not likely to be overridden.- Throws:
IOException
-
sizeOfType
public int sizeOfType(int type) throws ArrayIndexOutOfBoundsExceptionReturn the size of a data type. Extend if you need to define new TIFF field types. Also override the createField() method of the XTIFFFactory, the XTIFFField class, and the readFieldValue() method here.- Parameters:
type- the XTIFFField type code- Throws:
ArrayIndexOutOfBoundsException- See Also:
XTIFFField,XTIFFFactory
-
addField
public void addField(int tag, int type, int count, Object obj)Create and add a TIFF field to this directory.- Parameters:
tag- the TIFF tag listed in XTIFFtype- the TIFF field type listed in XTIFFFieldcount- the number of values in array objobj- the array of values- See Also:
XTIFFField,XTIFF
-
createField
public static XTIFFField createField(int tag, int type, int count, Object obj)
Create a TIFF field- Parameters:
tag- the TIFF tag listed in XTIFFtype- the TIFF field type listed in XTIFFFieldcount- the number of values in array objobj- the array of values- See Also:
XTIFFField,XTIFF
-
addField
public void addField(XTIFFField field)
Add an existing TIFF field to this directory.- Parameters:
field- the XTIFFField type code- See Also:
XTIFFField
-
initialize
protected void initialize() throws IOExceptionInitialize the directory from a stream- Throws:
IOException
-
getNumEntries
public int getNumEntries()
Returns the number of directory entries.
-
getField
public XTIFFField getField(int tag)
Returns the value of a given tag as a XTIFFField, or null if the tag is not present.
-
isTagPresent
public 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 XTIFFField[] getFields()
Returns an array of XTIFFFields containing all the fields in this directory.
-
getFieldAsByte
public 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 XTIFFField.TIFF_SBYTE, TIFF_BYTE, or TIFF_UNDEFINED.
-
getFieldAsByte
public byte getFieldAsByte(int tag)
Returns the value of index 0 of a given tag as a byte. The caller is responsible for ensuring that the tag is present and has type XTIFFField.TIFF_SBYTE, TIFF_BYTE, or TIFF_UNDEFINED.
-
getFieldAsLong
public 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
public 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
public 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).
-
getFieldAsFloat
public float getFieldAsFloat(int tag)
Returns the value of index 0 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
public 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).
-
getFieldAsDouble
public double getFieldAsDouble(int tag)
Returns the value of index 0 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).
-
readFieldValue
public Object readFieldValue(int tag, int type, int count) throws IOException, ArrayIndexOutOfBoundsException
TIFF field-value reader. Override if there are new field types. Also override sizeOfType() and, possibly the createField method of the factory, if the field needs new accessors.
-
readShort
protected short readShort(com.sun.media.jai.codec.SeekableStream stream) throws IOException- Throws:
IOException
-
readUnsignedShort
protected int readUnsignedShort(com.sun.media.jai.codec.SeekableStream stream) throws IOException- Throws:
IOException
-
readInt
protected int readInt(com.sun.media.jai.codec.SeekableStream stream) throws IOException- Throws:
IOException
-
readUnsignedInt
protected long readUnsignedInt(com.sun.media.jai.codec.SeekableStream stream) throws IOException- Throws:
IOException
-
readLong
protected long readLong(com.sun.media.jai.codec.SeekableStream stream) throws IOException- Throws:
IOException
-
readFloat
protected float readFloat(com.sun.media.jai.codec.SeekableStream stream) throws IOException- Throws:
IOException
-
readDouble
protected double readDouble(com.sun.media.jai.codec.SeekableStream stream) throws IOException- Throws:
IOException
-
getNumDirectories
public static int getNumDirectories(com.sun.media.jai.codec.SeekableStream stream) throws IOExceptionReturns the number of image directories (subimages) stored in a given TIFF file, represented by aSeekableStream.- Throws:
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)
-
setCompression
public void setCompression(int compression)
Specifies the type of compression to be used. The compression type specified will be honored only if it is compatible with the image being written out.- Parameters:
compression- The compression type.
-
getCompression
public int getCompression()
Return the type of compression indicated in the TIFF fields, or XTIFF.COMPRESSION_NON if not specified.
-
setIsTiled
public void setIsTiled(boolean isTiled)
If set, the data will be written out in tiled format, instead of in strips.- Parameters:
isTiled- Specifies whether the image data should be wriiten out in tiled format.
-
createTileCodec
public XTIFFTileCodec createTileCodec(XTIFFDecodeParam param) throws IOException
Constructs a tile codec for decoding data, using the compression defined in the current directory.- Parameters:
param- the encoding param- Throws:
IOException- See Also:
XTIFFTileCodec
-
createTileCodec
public XTIFFTileCodec createTileCodec(XTIFFEncodeParam param) throws IOException
Constructs a tile codec for encoding data, using the compression defined in the current directory.- Parameters:
param- the encoding param- Throws:
IOException- See Also:
XTIFFTileCodec
-
setFactory
public static void setFactory(XTIFFFactory fact)
Set the XTIFFFactory, which is used to construct the XTIFFDirectory object assigned as a "tiff.directory" property in the resulting jai image.- Parameters:
fact- the factory to register. The factory is guaranteed to always be non-null; if a null is passed in then the default XTIFFFactory is used. a null object is passed in- See Also:
XTIFFFactory
-
create
public static XTIFFDirectory create(com.sun.media.jai.codec.SeekableStream stream, int directory) throws IOException
Constructs a XTIFFDirectory 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 maintaing multiple directories.- Parameters:
stream- a SeekableStream to read from.directory- the index of the directory to read.- Throws:
IOException- See Also:
XTIFFFactory
-
create
public static XTIFFDirectory create(com.sun.media.jai.codec.SeekableStream stream, long ifd_offset) throws IOException
Constructs a TIFFDirectory by reading a SeekableStream. The ifd_offset parameter specifies the stream offset from which to begin reading; this mechanism is sometimes used to store private IFDs within a TIFF file that are not part of the normal sequence of IFDs. Uses the XTIFFFactory to do this, so to extend the directory class, the factory method should be extended and registered instead of this one.- Parameters:
stream- a SeekableStream to read from.ifd_offset- the long byte offset of the directory.- Throws:
IOException- See Also:
XTIFFFactory
-
create
public static XTIFFDirectory create()
Constructs an XTIFFDirectory from the currently. registered XTIFFDirectory factory.- See Also:
XTIFFFactory
-
getTileCodec
public static XTIFFTileCodec getTileCodec(int comp)
Return the currently registered XTIFFTileCodec for this compression type. Used by the XTIFFImage to decode the compression data.- See Also:
XTIFFTileCodec
-
unRegisterTileCodec
public static void unRegisterTileCodec(int comp)
UnRegister the XTIFFTileCodec corresponding to the TIFF compression type.- Parameters:
comp- The TIFF compression code indicated
-
registerTileCodec
public static void registerTileCodec(int comp, XTIFFTileCodec codec)Register a new XTIFFTileCodec for encoding and decoding compressed TIFF image data. This overrides any existing codec previously registered.- Parameters:
comp- The TIFF compression code indicated by thecodec- The codec to register. XTIFF.TIFFTAG_COMPRESSION field.- See Also:
XTIFFTileCodec
-
getImageType
public int getImageType()
Get the JAI Image decoded type. This method is called by the XTIFFTileCodeImpl object during the decode() method to determine what type of colorspace and sample model to use.
-
setImageType
public void setImageType(int image_type)
Set the JAI Image decoded type. This method is called by the XTIFFImage constructor to indicate to the XTIFFTileCodec what type of colorspace and sample model to use. The types are enumerated in the XTIFF class.- See Also:
XTIFF,XTIFFImage,XTIFFTileCodec
-
-