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(); }