org.libtiff.jai.codec
Class XTIFFTileCodecImpl

java.lang.Object
  extended by org.libtiff.jai.codec.XTIFFTileCodecImpl
All Implemented Interfaces:
XTIFFTileCodec
Direct Known Subclasses:
XTIFFFaxTileCodec, XTIFFLZWTileCodec, XTIFFPackTileCodec, XTIFFUncompTileCodec

public abstract class XTIFFTileCodecImpl
extends java.lang.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
protected  byte[] _bdata
           
protected  short[] _sdata
           
protected  char[] bitsPerSample
           
protected  byte[] bpixvals
           
protected  java.awt.image.DataBuffer buffer
           
protected  char[] colormap
           
protected  int compression
           
protected  int dataType
           
protected  boolean decodePaletteAsShorts
           
protected  XTIFFDecodeParam decodeParam
           
protected  XTIFFDirectory directory
           
protected  XTIFFEncodeParam encodeParam
           
protected  java.awt.image.RenderedImage image
           
protected  int image_type
           
protected  boolean isTiled
           
protected  int length
           
protected  int minX
           
protected  int minY
           
protected  int numBands
           
protected  java.awt.image.SampleModel sampleModel
           
protected  int[] sampleSize
           
protected  short[] spixvals
           
protected  int tileLength
           
protected  int tileWidth
           
protected  int unitsInThisTile
           
protected  int width
           
 
Constructor Summary
XTIFFTileCodecImpl()
          The empty constructor.
 
Method Summary
 boolean canEncode()
          Indicate whether this codec can encode data.
abstract  XTIFFTileCodec create()
          Implement this to return the corresponding empty codec object.
 XTIFFTileCodec create(XTIFFDecodeParam param)
          The standard decoder creation method
 XTIFFTileCodec create(XTIFFEncodeParam param)
          The method for creating an encoder from the XTIFFEncodeParam information.
 java.awt.image.WritableRaster decode(java.awt.image.RenderedImage img, java.awt.Rectangle newRect, byte[] bpixels)
          Decode a rectangle of data stored in bpixels into a raster tile.
protected  void decodeColor(byte[] bpix, byte[] bdata, java.awt.Rectangle newRect)
          Decode byte color data
protected  void decodeColor(byte[] bpix, short[] sdata, java.awt.Rectangle newRect)
          Decode short pixel data, or interpret palette data as short from byte.
protected  void decodeColor(java.awt.Rectangle newRect)
          Postprocess the uncompressed color data into the appropriate display color model.
protected  void decodeColor(short[] spix, short[] sdata, java.awt.Rectangle newRect)
          Decode short color data, or interpret palette data as short.
protected  void decodeTilePixels(byte[] bpixels, java.awt.Rectangle newRect)
          Decode a tile of data into either byte or short pixel buffers.
abstract  void decodeTilePixels(byte[] bpixels, java.awt.Rectangle rect, byte[] pixels)
          decode bpixel byte array of data into pixels, packed for 1,2,4 8 bit pixels.
abstract  void decodeTilePixels(byte[] bpixels, java.awt.Rectangle rect, short[] pixels)
          decode bpixel byte array of data into pixels, packed for 16 bit pixels.
 int encode(java.awt.image.RenderedImage img, java.awt.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 the encodeTilePixels() method.
 int encodeTilePixels(int[] pixels, java.awt.Rectangle rect, byte[] bpixels)
          encode the tile in pixels into bpixels and return the byte size of the compressed data.
 int getCompressedTileSize(java.awt.image.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.
 int getCompression()
          Returns the TIFF compression type
protected  long getLongField(int fld)
          A common utility method for accessing the XTIFFFields in the current image directory.
protected  void getTilePixels(java.awt.Rectangle rect)
          Get the portion of tile fitting into buffer.
 void initialize()
          The method for initializing information common to both encoder and decoder.
protected  void initialize(XTIFFDecodeParam param)
           
protected  void initialize(XTIFFEncodeParam param)
           
 void initializeDecoding()
          The initialization method particular to decoding.
 void initializeEncoding()
          The initialization method particular to encoding.
abstract  void register()
          Registration method.
 void register(int comp)
          This method may be used by the implementations register() method to register itself with the XTIFFDirectory.
protected  java.awt.image.WritableRaster setTilePixels(java.awt.Rectangle rect)
          Take the values from the buffer and store them in a WritableRaster object.
protected  void setupBufferForDecoding()
          One-time setup for encoding.
protected  void setupBufferForEncoding()
          One-time setup for encoding
protected  void setupSourceImage(java.awt.image.RenderedImage img)
          One-time common image parameter setup
protected  void unpackShorts(byte[] byteArray, short[] output, int shortCount)
          A useful Method to interpret a byte array as shorts.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

directory

protected XTIFFDirectory directory

image

protected java.awt.image.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 java.awt.image.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 java.awt.image.DataBuffer buffer

dataType

protected int dataType

image_type

protected int image_type
Constructor Detail

XTIFFTileCodecImpl

public XTIFFTileCodecImpl()
The empty constructor.

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:
register in interface XTIFFTileCodec
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,
                                      java.awt.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 data
rect - the rectangular shape of the target pixels
pixels - the target decompressed pixels.

decodeTilePixels

public abstract void decodeTilePixels(byte[] bpixels,
                                      java.awt.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 data
rect - the rectangular shape of the target pixels
pixels - the target decompressed pixels.

encodeTilePixels

public int encodeTilePixels(int[] pixels,
                            java.awt.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 pixels
rect - the array dimensions of samples
bpixels - 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(java.awt.image.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:
getCompression in interface XTIFFTileCodec

create

public XTIFFTileCodec create(XTIFFEncodeParam param)
                      throws java.io.IOException
The method for creating an encoder from the XTIFFEncodeParam information.

Specified by:
create in interface XTIFFTileCodec
Parameters:
param - the encoding parameter. It is the responsibility of the codec to initialize itself from this parameter.
Throws:
java.io.IOException

initialize

protected void initialize(XTIFFEncodeParam param)
                   throws java.io.IOException
Throws:
java.io.IOException

encode

public int encode(java.awt.image.RenderedImage img,
                  java.awt.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 the encodeTilePixels() method.

Specified by:
encode in interface XTIFFTileCodec

setupBufferForEncoding

protected void setupBufferForEncoding()
One-time setup for encoding


getTilePixels

protected void getTilePixels(java.awt.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(java.awt.image.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:
getCompressedTileSize in interface XTIFFTileCodec
Parameters:
im - the rendered image containing the image data

create

public XTIFFTileCodec create(XTIFFDecodeParam param)
                      throws java.io.IOException
The standard decoder creation method

Specified by:
create in interface XTIFFTileCodec
Parameters:
param - the decoding parameter. It is the responsibility of the codec to initialize itself from this parameter.
Throws:
java.io.IOException

initialize

protected void initialize(XTIFFDecodeParam param)
                   throws java.io.IOException
Throws:
java.io.IOException

setupBufferForDecoding

protected void setupBufferForDecoding()
One-time setup for encoding. Some configurations require a temp array for unpacking 16-bit palette data.


decode

public java.awt.image.WritableRaster decode(java.awt.image.RenderedImage img,
                                            java.awt.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:
decode in interface XTIFFTileCodec

decodeColor

protected void decodeColor(java.awt.Rectangle newRect)
Postprocess the uncompressed color data into the appropriate display color model. This implementation Does a number of things: Override this if you have other color types.

See Also:
XTIFFDecodeParam

decodeTilePixels

protected void decodeTilePixels(byte[] bpixels,
                                java.awt.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 java.awt.image.WritableRaster setTilePixels(java.awt.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,
                           java.awt.Rectangle newRect)
Decode short pixel data, or interpret palette data as short from byte.


decodeColor

protected void decodeColor(short[] spix,
                           short[] sdata,
                           java.awt.Rectangle newRect)
Decode short color data, or interpret palette data as short.


decodeColor

protected void decodeColor(byte[] bpix,
                           byte[] bdata,
                           java.awt.Rectangle newRect)
Decode byte color data