01: package org.libtiff.jai.codec;
02:
03: import java.awt.Rectangle;
04: import java.awt.image.RenderedImage;
05: import java.awt.image.WritableRaster;
06: import java.io.IOException;
07:
08: /**
09: * The XTIFFTileCodec is the common interface used by all
10: * registered implementations of TIFF data compression.
11: * Unlike other file formats, TIFF has no fixed set of
12: * data compressions schemes, but allows for new and
13: * user-defined compression types.
14: *<p>
15: * To use a new codec with the XTIFFDirectory you must
16: * do the following things:
17: * <ul>
18: * <li> register XTIFF methods with JAI through the XTIFFDescriptor
19: * <li> implement the methods below; it is recommended to
20: * use the XTIFFTileCodecImpl class for this purpose, as
21: * it reduces the problem to one of defining the actual
22: * data compression and decompression algorithms. If you
23: * do not support encoding (e.g LZW), be sure the canEncode()
24: * methods returns false.
25: * <li> register the implemented code with the XTIFFDirectory,
26: * indicating in the register method all TIFF compression
27: * codes that this codec can handle.
28: * </ul>
29: * @see XTIFFTileCodecImpl
30: */
31: public interface XTIFFTileCodec {
32:
33: /**
34: * Create a codec for encoding data.
35: * @param param the encoding parameter. It is the responsibility
36: * of the codec to initialize itself from this parameter.
37: */
38: public XTIFFTileCodec create(XTIFFEncodeParam param)
39: throws IOException;
40:
41: /**
42: * Create a codec for decoding
43: * @param param the decoding parameter. It is the responsibility
44: * of the codec to initialize itself from this parameter.
45: */
46: public XTIFFTileCodec create(XTIFFDecodeParam param)
47: throws IOException;
48:
49: /**
50: * Encode some data from RenderedImage, and return the
51: * actual number of bytes stored in output buffer.
52: */
53: public int encode(RenderedImage im, Rectangle rect, byte[] output);
54:
55: /**
56: * Decode input byte data into a new WritableRaster, using
57: * information from underlying RenderedImage
58: */
59: public WritableRaster decode(RenderedImage im, Rectangle rect,
60: byte[] input);
61:
62: /**
63: * Return the associated TIFF compression code
64: */
65: public int getCompression();
66:
67: /**
68: * Return the largest possible compressed buffer size
69: * for this image in bytes. This is used by the XTIFFImage
70: * constructor to allocate a decoding buffer.
71: */
72: public int getCompressedTileSize(RenderedImage im);
73:
74: /**
75: * Register this codec with the XTIFFDirectory.
76: * The method may register itself with multiple
77: * TIFF compression codes, if it supports more than
78: * one.
79: * @see XTIFFDirectory
80: */
81: public void register();
82: }
|