Package org.libtiff.jai.codec
Class XTIFFTileCodecImpl
- java.lang.Object
-
- org.libtiff.jai.codec.XTIFFTileCodecImpl
-
- All Implemented Interfaces:
XTIFFTileCodec
- Direct Known Subclasses:
XTIFFFaxTileCodec,XTIFFLZWTileCodec,XTIFFPackTileCodec,XTIFFUncompTileCodec
public abstract class XTIFFTileCodecImpl extends Object implements XTIFFTileCodec
Provides a base class for writing TIFF tile codecs, to be registered with the XTIFFDirectory. This codec allows for both decoding and (optionally) encoding of tiles, and also handles the colorspace conversion in decoding.At the minimum you will need to implement the two methods decodeTilePixels() for byte and short data, as well as the methods register() and create(). If your decoder requires additional parameters from the tags, set them up in initializeDecoding(), and initializeEncoding() for encoding.
To implement encoding, you must override the canEncode() method to return true, and implement encodeTilePixels().
- Author:
- Niles Ritter
- See Also:
XTIFFTileCodec
-
-
Field Summary
Fields Modifier and Type Field Description protected byte[]_bdataprotected short[]_sdataprotected char[]bitsPerSampleprotected byte[]bpixvalsprotected DataBufferbufferprotected char[]colormapprotected intcompressionprotected intdataTypeprotected booleandecodePaletteAsShortsprotected XTIFFDecodeParamdecodeParamprotected XTIFFDirectorydirectoryprotected XTIFFEncodeParamencodeParamprotected RenderedImageimageprotected intimage_typeprotected booleanisTiledprotected intlengthprotected intminXprotected intminYprotected intnumBandsprotected SampleModelsampleModelprotected int[]sampleSizeprotected short[]spixvalsprotected inttileLengthprotected inttileWidthprotected intunitsInThisTileprotected intwidth
-
Constructor Summary
Constructors Constructor Description XTIFFTileCodecImpl()The empty constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description booleancanEncode()Indicate whether this codec can encode data.abstract XTIFFTileCodeccreate()Implement this to return the corresponding empty codec object.XTIFFTileCodeccreate(XTIFFDecodeParam param)The standard decoder creation methodXTIFFTileCodeccreate(XTIFFEncodeParam param)The method for creating an encoder from the XTIFFEncodeParam information.WritableRasterdecode(RenderedImage img, Rectangle newRect, byte[] bpixels)Decode a rectangle of data stored in bpixels into a raster tile.protected voiddecodeColor(byte[] bpix, byte[] bdata, Rectangle newRect)Decode byte color dataprotected voiddecodeColor(byte[] bpix, short[] sdata, Rectangle newRect)Decode short pixel data, or interpret palette data as short from byte.protected voiddecodeColor(short[] spix, short[] sdata, Rectangle newRect)Decode short color data, or interpret palette data as short.protected voiddecodeColor(Rectangle newRect)Postprocess the uncompressed color data into the appropriate display color model.protected voiddecodeTilePixels(byte[] bpixels, Rectangle newRect)Decode a tile of data into either byte or short pixel buffers.abstract voiddecodeTilePixels(byte[] bpixels, Rectangle rect, byte[] pixels)decode bpixel byte array of data into pixels, packed for 1,2,4 8 bit pixels.abstract voiddecodeTilePixels(byte[] bpixels, Rectangle rect, short[] pixels)decode bpixel byte array of data into pixels, packed for 16 bit pixels.intencode(RenderedImage img, Rectangle rect, byte[] bpixels)Encode the data into buffer and return byte count Normally you will not need to override this method, but instead implement theencodeTilePixels()method.intencodeTilePixels(int[] pixels, Rectangle rect, byte[] bpixels)encode the tile in pixels into bpixels and return the byte size of the compressed data.intgetCompressedTileSize(RenderedImage im)If derived classes can make a better estimate for the maximum size of a compressed tile, they should override this, which assumes conservatively that it won't be worse than twice the original size.intgetCompression()Returns the TIFF compression typeprotected longgetLongField(int fld)A common utility method for accessing the XTIFFFields in the current image directory.protected voidgetTilePixels(Rectangle rect)Get the portion of tile fitting into buffer.voidinitialize()The method for initializing information common to both encoder and decoder.protected voidinitialize(XTIFFDecodeParam param)protected voidinitialize(XTIFFEncodeParam param)voidinitializeDecoding()The initialization method particular to decoding.voidinitializeEncoding()The initialization method particular to encoding.abstract voidregister()Registration method.voidregister(int comp)This method may be used by the implementations register() method to register itself with the XTIFFDirectory.protected WritableRastersetTilePixels(Rectangle rect)Take the values from the buffer and store them in a WritableRaster object.protected voidsetupBufferForDecoding()One-time setup for encoding.protected voidsetupBufferForEncoding()One-time setup for encodingprotected voidsetupSourceImage(RenderedImage img)One-time common image parameter setupprotected voidunpackShorts(byte[] byteArray, short[] output, int shortCount)A useful Method to interpret a byte array as shorts.
-
-
-
Field Detail
-
directory
protected XTIFFDirectory directory
-
image
protected RenderedImage image
-
minY
protected int minY
-
minX
protected int minX
-
width
protected int width
-
length
protected int length
-
numBands
protected int numBands
-
tileLength
protected int tileLength
-
tileWidth
protected int tileWidth
-
compression
protected int compression
-
sampleModel
protected SampleModel sampleModel
-
sampleSize
protected int[] sampleSize
-
bitsPerSample
protected char[] bitsPerSample
-
colormap
protected char[] colormap
-
encodeParam
protected XTIFFEncodeParam encodeParam
-
isTiled
protected boolean isTiled
-
decodeParam
protected XTIFFDecodeParam decodeParam
-
decodePaletteAsShorts
protected boolean decodePaletteAsShorts
-
unitsInThisTile
protected int unitsInThisTile
-
_bdata
protected byte[] _bdata
-
_sdata
protected short[] _sdata
-
bpixvals
protected byte[] bpixvals
-
spixvals
protected short[] spixvals
-
buffer
protected DataBuffer buffer
-
dataType
protected int dataType
-
image_type
protected int image_type
-
-
Method Detail
-
register
public abstract void register()
Registration method. Must be implemented by the extended class to register itself with the XTIFFDirectory for all compression codes it supports (e.g Fax codec supports 3 codes).- Specified by:
registerin interfaceXTIFFTileCodec- See Also:
XTIFFDirectory
-
create
public abstract XTIFFTileCodec create()
Implement this to return the corresponding empty codec object.
-
canEncode
public boolean canEncode()
Indicate whether this codec can encode data. Override to return true only if your codec implments encoding.
-
initializeDecoding
public void initializeDecoding()
The initialization method particular to decoding. Extend for whatever compression-specific information or parameters is needed. The decoding parameter has already been assigned at this point, as well as the XTIFFDirectory parsed from the input stream, and so all XTIFFFields are available.
-
initializeEncoding
public void initializeEncoding()
The initialization method particular to encoding. Extend for whatever compression-specific information or parameters is needed. The decoding parameter has already been assigned at this point, as well as the XTIFFDirectory parsed from the input stream, and so all XTIFFFields are available.
-
decodeTilePixels
public abstract void decodeTilePixels(byte[] bpixels, Rectangle rect, byte[] pixels)decode bpixel byte array of data into pixels, packed for 1,2,4 8 bit pixels. Must implment this.- Parameters:
bpixels- the byte array of compressed input datarect- the rectangular shape of the target pixelspixels- the target decompressed pixels.
-
decodeTilePixels
public abstract void decodeTilePixels(byte[] bpixels, Rectangle rect, short[] pixels)decode bpixel byte array of data into pixels, packed for 16 bit pixels. Must implment this.- Parameters:
bpixels- the byte array of compressed input datarect- the rectangular shape of the target pixelspixels- the target decompressed pixels.
-
encodeTilePixels
public int encodeTilePixels(int[] pixels, Rectangle rect, byte[] bpixels)encode the tile in pixels into bpixels and return the byte size of the compressed data. Override this method if canEncode() = true;- Parameters:
pixels- input pixelsrect- the array dimensions of samplesbpixels- the target array of compressed byte data
-
initialize
public void initialize()
The method for initializing information common to both encoder and decoder.
-
getLongField
protected long getLongField(int fld)
A common utility method for accessing the XTIFFFields in the current image directory.
-
register
public void register(int comp)
This method may be used by the implementations register() method to register itself with the XTIFFDirectory.- See Also:
XTIFFDirectory
-
setupSourceImage
protected void setupSourceImage(RenderedImage img)
One-time common image parameter setup- Parameters:
img- the source image that will be encoded into a TIFF formatted stream, or the TIFF image from which Raster tiles will be decoded.
-
getCompression
public int getCompression()
Returns the TIFF compression type- Specified by:
getCompressionin interfaceXTIFFTileCodec
-
create
public XTIFFTileCodec create(XTIFFEncodeParam param) throws IOException
The method for creating an encoder from the XTIFFEncodeParam information.- Specified by:
createin interfaceXTIFFTileCodec- Parameters:
param- the encoding parameter. It is the responsibility of the codec to initialize itself from this parameter.- Throws:
IOException
-
initialize
protected void initialize(XTIFFEncodeParam param) throws IOException
- Throws:
IOException
-
encode
public int encode(RenderedImage img, Rectangle rect, byte[] bpixels)
Encode the data into buffer and return byte count Normally you will not need to override this method, but instead implement theencodeTilePixels()method.- Specified by:
encodein interfaceXTIFFTileCodec
-
setupBufferForEncoding
protected void setupBufferForEncoding()
One-time setup for encoding
-
getTilePixels
protected void getTilePixels(Rectangle rect)
Get the portion of tile fitting into buffer. You probably won't need to override this.- Parameters:
rect- the region to extract from image.
-
getCompressedTileSize
public int getCompressedTileSize(RenderedImage im)
If derived classes can make a better estimate for the maximum size of a compressed tile, they should override this, which assumes conservatively that it won't be worse than twice the original size.- Specified by:
getCompressedTileSizein interfaceXTIFFTileCodec- Parameters:
im- the rendered image containing the image data
-
create
public XTIFFTileCodec create(XTIFFDecodeParam param) throws IOException
The standard decoder creation method- Specified by:
createin interfaceXTIFFTileCodec- Parameters:
param- the decoding parameter. It is the responsibility of the codec to initialize itself from this parameter.- Throws:
IOException
-
initialize
protected void initialize(XTIFFDecodeParam param) throws IOException
- Throws:
IOException
-
setupBufferForDecoding
protected void setupBufferForDecoding()
One-time setup for encoding. Some configurations require a temp array for unpacking 16-bit palette data.
-
decode
public WritableRaster decode(RenderedImage img, Rectangle newRect, byte[] bpixels)
Decode a rectangle of data stored in bpixels into a raster tile. Usually you will not need to override this, but instead implement the decodeTilePixels methods.- Specified by:
decodein interfaceXTIFFTileCodec
-
decodeColor
protected void decodeColor(Rectangle newRect)
Postprocess the uncompressed color data into the appropriate display color model. This implementation Does a number of things:- For RGB color, reverse to BGR which apparently is faster for Java 2D display
- For one-bit WHITE_IS_ZERO data, flip the values so that they will look correct
- If the decodePaletteAsShorts flag is true then unpack the bits and apply the lookup table, as 16-bit lookup is not supported in JAI.
- See Also:
XTIFFDecodeParam
-
decodeTilePixels
protected void decodeTilePixels(byte[] bpixels, Rectangle newRect)Decode a tile of data into either byte or short pixel buffers. Override this if you have other buffer types (e.g. int)
-
setTilePixels
protected WritableRaster setTilePixels(Rectangle rect)
Take the values from the buffer and store them in a WritableRaster object.
-
unpackShorts
protected void unpackShorts(byte[] byteArray, short[] output, int shortCount)A useful Method to interpret a byte array as shorts. Method depends on whether the bytes are stored in a big endian or little endian format.
-
decodeColor
protected void decodeColor(byte[] bpix, short[] sdata, Rectangle newRect)Decode short pixel data, or interpret palette data as short from byte.
-
decodeColor
protected void decodeColor(short[] spix, short[] sdata, Rectangle newRect)Decode short color data, or interpret palette data as short.
-
decodeColor
protected void decodeColor(byte[] bpix, byte[] bdata, Rectangle newRect)Decode byte color data
-
-