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