jp2codec.image.invcomptransf
Class InvCompTransf

java.lang.Object
  extended by jp2codec.image.ImgDataAdapter
      extended by jp2codec.image.invcomptransf.InvCompTransf
All Implemented Interfaces:
BlkImgDataSrc, ImgData

public class InvCompTransf
extends ImgDataAdapter
implements BlkImgDataSrc

This class apply inverse component transformations to the tiles depending on specification read from the codestream header. These transformations can be used to improve compression efficiency but are not related to colour transforms used to map colour values for display purposes. JPEG 2000 part I defines 2 component transformations: RCT (Reversible Component Transformation) and ICT (Irreversible Component Transformation).

See Also:
ModuleSpec

Field Summary
static int INV_ICT
          Identifier for the Inverse Irreversible Component Transformation (INV_ICT).
static int INV_RCT
          Identifier for the Inverse Reversible Component Transformation (INV_RCT).
static int NONE
          Identifier for no component transformation.
 
Fields inherited from class jp2codec.image.ImgDataAdapter
imgdatasrc, tIdx
 
Constructor Summary
InvCompTransf(BlkImgDataSrc imgSrc, DecoderSpecs decSpec, int[] utdepth)
          Constructs a new ForwCompTransf object that operates on the specified source of image data.
 
Method Summary
static int[] calcMixedBitDepths(int[] utdepth, int ttype, int[] tdepth)
          Calculates the bitdepths of the transformed components, given the bitdepth of the un-transformed components and the component tranformation type.
 DataBlk getCompData(DataBlk blk, int c)
          Apply inverse component transformation associated with the current tile.
 int getFixedPoint(int c)
          Returns the position of the fixed point in the specified component.
 DataBlk getInternCompData(DataBlk blk, int c)
          Apply the inverse component transformation associated with the current tile.
 int getNomRangeBits(int c)
          Returns the number of bits, referred to as the "range bits", corresponding to the nominal range of the data in the specified component.
 void invCT(java.awt.image.BufferedImage img)
           
 boolean isReversible()
          Returns true if this transform is reversible in current tile.
 void nextTile()
          Advances to the next tile, in standard scan-line order (by rows then columns).
 void setTile(int x, int y)
          Changes the current tile, given the new indexes.
 java.lang.String toString()
          Returns a string with a descriptive text of which inverse component transformation is used.
 
Methods inherited from class jp2codec.image.ImgDataAdapter
getCompHeight, getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getCompWidth, getHeight, getImgHeight, getImgULX, getImgULY, getImgWidth, getNumComps, getNumTiles, getNumTiles, getTile, getTileIdx, getTileOff, getULX, getULY, getWidth
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface jp2codec.image.ImgData
getCompHeight, getCompImgHeight, getCompImgWidth, getCompSubsX, getCompSubsY, getCompWidth, getHeight, getImgHeight, getImgULX, getImgULY, getImgWidth, getNumComps, getNumTiles, getNumTiles, getTile, getTileIdx, getTileOff, getULX, getULY, getWidth
 

Field Detail

NONE

public static final int NONE
Identifier for no component transformation. Value is 0.

See Also:
Constant Field Values

INV_RCT

public static final int INV_RCT
Identifier for the Inverse Reversible Component Transformation (INV_RCT). Value is 1.

See Also:
Constant Field Values

INV_ICT

public static final int INV_ICT
Identifier for the Inverse Irreversible Component Transformation (INV_ICT). Value is 2

See Also:
Constant Field Values
Constructor Detail

InvCompTransf

public InvCompTransf(BlkImgDataSrc imgSrc,
                     DecoderSpecs decSpec,
                     int[] utdepth)
Constructs a new ForwCompTransf object that operates on the specified source of image data.

Parameters:
imgSrc - The source from where to get the data to be transformed
decSpec - The decoder specifications
See Also:
BlkImgDataSrc
Method Detail

toString

public java.lang.String toString()
Returns a string with a descriptive text of which inverse component transformation is used. This can be either "Inverse RCT" or "Inverse ICT" or "No component transformation" depending on the current tile.

Overrides:
toString in class java.lang.Object
Returns:
A descriptive string

isReversible

public boolean isReversible()
Returns true if this transform is reversible in current tile. Reversible component transformations are those which operation can be completely reversed without any loss of information (not even due to rounding).

Returns:
Reversibility of component transformation in current tile

getFixedPoint

public int getFixedPoint(int c)
Returns the position of the fixed point in the specified component. This is the position of the least significant integral (i.e. non-fractional) bit, which is equivalent to the number of fractional bits. For instance, for fixed-point values with 2 fractional bits, 2 is returned. For floating-point data this value does not apply and 0 should be returned. Position 0 is the position of the least significant bit in the data.

This default implementation assumes that the number of fractional bits is not modified by the component mixer.

Specified by:
getFixedPoint in interface BlkImgDataSrc
Parameters:
c - The index of the component.
Returns:
The value of the fixed point position of the source since the color transform does not affect it.

calcMixedBitDepths

public static int[] calcMixedBitDepths(int[] utdepth,
                                       int ttype,
                                       int[] tdepth)
Calculates the bitdepths of the transformed components, given the bitdepth of the un-transformed components and the component tranformation type.

Parameters:
utdepth - The bitdepth of each un-transformed component
ttype - The type ID of the inverse component tranformation
tdepth - If not null the results are stored in this array, otherwise a new array is allocated and returned.
Returns:
The bitdepth of each transformed component.

getNomRangeBits

public int getNomRangeBits(int c)
Returns the number of bits, referred to as the "range bits", corresponding to the nominal range of the data in the specified component. If this number is b then for unsigned data the nominal range is between 0 and 2^b-1, and for signed data it is between -2^(b-1) and 2^(b-1)-1.

Specified by:
getNomRangeBits in interface ImgData
Overrides:
getNomRangeBits in class ImgDataAdapter
Parameters:
c - The index of the component.
Returns:
The bitdepth of un-transformed component 'c'.

getCompData

public DataBlk getCompData(DataBlk blk,
                           int c)
Apply inverse component transformation associated with the current tile. If no component transformation has been requested by the user, data are not modified.

This method calls the getInternCompData() method, but respects the definitions of the getCompData() method defined in the BlkImgDataSrc interface.

Specified by:
getCompData in interface BlkImgDataSrc
Parameters:
blk - Determines the rectangular area to return, and the data is returned in this object.
c - Index of the output component.
Returns:
The requested DataBlk
See Also:
BlkImgDataSrc.getCompData(jp2codec.image.DataBlk, int)

getInternCompData

public DataBlk getInternCompData(DataBlk blk,
                                 int c)
Apply the inverse component transformation associated with the current tile. If no component transformation has been requested by the user, data are not modified. Else, appropriate method is called (invRCT or invICT).

Specified by:
getInternCompData in interface BlkImgDataSrc
Parameters:
blk - Determines the rectangular area to return.
c - Index of the output component.
Returns:
The requested DataBlk
See Also:
invRCT(jp2codec.image.DataBlk, int), invICT(jp2codec.image.DataBlk, int)

invCT

public void invCT(java.awt.image.BufferedImage img)

setTile

public void setTile(int x,
                    int y)
Changes the current tile, given the new indexes. An IllegalArgumentException is thrown if the indexes do not correspond to a valid tile.

This default implementation changes the tile in the source and re-initializes properly component transformation variables..

Specified by:
setTile in interface ImgData
Overrides:
setTile in class ImgDataAdapter
Parameters:
x - The horizontal index of the tile.
y - The vertical index of the new tile.

nextTile

public void nextTile()
Advances to the next tile, in standard scan-line order (by rows then columns). An NoNextElementException is thrown if the current tile is the last one (i.e. there is no next tile).

This default implementation just advances to the next tile in the source and re-initializes properly component transformation variables.

Specified by:
nextTile in interface ImgData
Overrides:
nextTile in class ImgDataAdapter