package org.libtiff.jai.codec; import java.awt.Rectangle; import java.awt.image.RenderedImage; import java.awt.image.WritableRaster; import java.io.IOException; /** * The XTIFFTileCodec is the common interface used by all registered * implementations of TIFF data compression. Unlike other file formats, TIFF has * no fixed set of data compressions schemes, but allows for new and * user-defined compression types. * <p> * To use a new codec with the XTIFFDirectory you must do the following things: * <ul> * <li> register XTIFF methods with JAI through the XTIFFDescriptor * <li> implement the methods below; it is recommended to use the * XTIFFTileCodecImpl class for this purpose, as it reduces the problem to one * of defining the actual data compression and decompression algorithms. If you * do not support encoding (e.g LZW), be sure the canEncode() methods returns * false. * <li> register the implemented code with the XTIFFDirectory, indicating in the * register method all TIFF compression codes that this codec can handle. * </ul> * * @see XTIFFTileCodecImpl */ public interface XTIFFTileCodec { /** * Create a codec for encoding data. * * @param param the encoding parameter. It is the responsibility of the * codec to initialize itself from this parameter. */ public XTIFFTileCodec create(XTIFFEncodeParam param) throws IOException; /** * Create a codec for decoding * * @param param the decoding parameter. It is the responsibility of the * codec to initialize itself from this parameter. */ public XTIFFTileCodec create(XTIFFDecodeParam param) throws IOException; /** * Encode some data from RenderedImage, and return the actual number of * bytes stored in output buffer. */ public int encode(RenderedImage im, Rectangle rect, byte[] output); /** * Decode input byte data into a new WritableRaster, using information from * underlying RenderedImage */ public WritableRaster decode(RenderedImage im, Rectangle rect, byte[] input); /** * Return the associated TIFF compression code */ public int getCompression(); /** * Return the largest possible compressed buffer size for this image in * bytes. This is used by the XTIFFImage constructor to allocate a decoding * buffer. */ public int getCompressedTileSize(RenderedImage im); /** * Register this codec with the XTIFFDirectory. The method may register * itself with multiple TIFF compression codes, if it supports more than * one. * * @see XTIFFDirectory */ public void register(); }