javax.media.jai
Class FloatDoubleColorModel

java.lang.Object
  |
  +--java.awt.image.ColorModel
        |
        +--java.awt.image.ComponentColorModel
              |
              +--javax.media.jai.FloatDoubleColorModel
All Implemented Interfaces:
Transparency

public class FloatDoubleColorModel
extends ComponentColorModel

A ColorModel class that works with pixel values that represent color and alpha information as separate samples, using float or double elements. This class can be used with an arbitrary ColorSpace. The number of color samples in the pixel values must be same as the number of color components in the ColorSpace. There may be a single alpha sample.

Sample values are taken as ranging from 0.0 to 1.0; that is, when converting to 8-bit RGB, a multiplication by 255 is performed and values outside of the range 0-255 are clamped at the closest endpoint.

For maximum efficiency, pixel data being interpreted by this class should be in the sRGB color space. This will result in only the trivial conversion (scaling by 255 and dividing by any premultiplied alpha) to be performed. Other color spaces require more general conversions.

For those methods that use a primitive array pixel representation of type transferType, the array length is the same as the number of color and alpha samples. Color samples are stored first in the array followed by the alpha sample, if present. The order of the color samples is specified by the ColorSpace. Typically, this order reflects the name of the color space type. For example, for TYPE_RGB, index 0 corresponds to red, index 1 to green, and index 2 to blue. The transfer types supported are DataBuffer.TYPE_FLOAT, DataBuffer.TYPE_DOUBLE.

The translation from pixel values to color/alpha components for display or processing purposes is a one-to-one correspondence of samples to components.

Methods that use a single int pixel representation throw an IllegalArgumentException.

A FloatDoubleColorModel can be used in conjunction with a ComponentSampleModelJAI.

See Also:
ColorModel, ColorSpace, ComponentSampleModel, ComponentSampleModelJAI

Field Summary
protected  ColorSpace colorSpace
          The associated ColorSpace.
protected  int colorSpaceType
          The type or family of the associated ColorSpace.
protected  boolean hasAlpha
          Whether this ColorModel supports alpha.
protected  boolean isAlphaPremultiplied
          Whether alpha is premultiplied.
protected  int numColorComponents
          The number of components of the associated ColorSpace.
protected  int numComponents
          The number of components represented by this ColorModel.
protected  int transparency
          Specifies what alpha values can be represented by this ColorModel.
 
Fields inherited from class java.awt.image.ColorModel
pixel_bits, transferType
 
Fields inherited from interface java.awt.Transparency
BITMASK, OPAQUE, TRANSLUCENT
 
Constructor Summary
FloatDoubleColorModel(ColorSpace colorSpace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType)
          Constructs a ComponentColorModel from the specified parameters.
 
Method Summary
 ColorModel coerceData(WritableRaster raster, boolean isAlphaPremultiplied)
          Forces the raster data to match the state specified in the isAlphaPremultiplied variable, assuming the data is currently correctly described by this ColorModel.
 SampleModel createCompatibleSampleModel(int w, int h)
          Creates a SampleModel with the specified width and height that has a data layout compatible with this ColorModel.
 WritableRaster createCompatibleWritableRaster(int w, int h)
          Creates a WritableRaster with the specified width and height, that has a data layout (SampleModel) compatible with this ColorModel.
 int getAlpha(int pixel)
          Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
 int getAlpha(Object inData)
          Returns the alpha component for the specified pixel, scaled from 0 to 255.
 int getBlue(int pixel)
          Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
 int getBlue(Object inData)
          Returns the blue color component for the specified pixel, scaled from 0 to 255 in the default RGB ColorSpace, sRGB.
 int[] getComponents(int pixel, int[] components, int offset)
          Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
 int[] getComponents(Object pixel, int[] components, int offset)
          Throws an IllegalArgumentException since the pixel values cannot be placed into an int array.
 int getDataElement(int[] components, int offset)
          Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
 Object getDataElements(int[] components, int offset, Object obj)
          Returns a data element array representation of a pixel in this ColorModel, given an array of unnormalized color/alpha components.
 Object getDataElements(int rgb, Object pixel)
          Returns a data element array representation of a pixel in this ColorModel, given an integer pixel representation in the default RGB color model.
 int getGreen(int pixel)
          Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
 int getGreen(Object inData)
          Returns the green color component for the specified pixel, scaled from 0 to 255 in the default RGB ColorSpace, sRGB.
 int getRed(int pixel)
          Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
 int getRed(Object inData)
          Returns the red color component for the specified pixel, scaled from 0 to 255 in the default RGB ColorSpace, sRGB.
 int getRGB(int pixel)
          Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
 int getRGB(Object inData)
          Returns the color/alpha components for the specified pixel in the default RGB color model format.
 boolean isCompatibleRaster(Raster raster)
          Returns true if the supplied Raster's SampleModel is compatible with this FloatDoubleColorModel.
 boolean isCompatibleSampleModel(SampleModel sm)
          Checks whether or not the specified SampleModel is compatible with this ColorModel.
 String toString()
          Returns a String containing the values of all valid fields.
 
Methods inherited from class java.awt.image.ComponentColorModel
equals, getAlphaRaster
 
Methods inherited from class java.awt.image.ColorModel
finalize, getColorSpace, getComponentSize, getComponentSize, getNormalizedComponents, getNumColorComponents, getNumComponents, getPixelSize, getRGBdefault, getTransferType, getTransparency, getUnnormalizedComponents, hasAlpha, hashCode, isAlphaPremultiplied
 
Methods inherited from class java.lang.Object
clone, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

colorSpace

protected ColorSpace colorSpace
The associated ColorSpace.
Since:
JAI 1.1

colorSpaceType

protected int colorSpaceType
The type or family of the associated ColorSpace.
Since:
JAI 1.1

numColorComponents

protected int numColorComponents
The number of components of the associated ColorSpace.
Since:
JAI 1.1

numComponents

protected int numComponents
The number of components represented by this ColorModel. This will differ from the number of components of the associated ColorSpace if there is an alpha channel.
Since:
JAI 1.1

transparency

protected int transparency
Specifies what alpha values can be represented by this ColorModel.
Since:
JAI 1.1

hasAlpha

protected boolean hasAlpha
Whether this ColorModel supports alpha.
Since:
JAI 1.1

isAlphaPremultiplied

protected boolean isAlphaPremultiplied
Whether alpha is premultiplied.
Since:
JAI 1.1
Constructor Detail

FloatDoubleColorModel

public FloatDoubleColorModel(ColorSpace colorSpace,
                             boolean hasAlpha,
                             boolean isAlphaPremultiplied,
                             int transparency,
                             int transferType)
Constructs a ComponentColorModel from the specified parameters. Color components will be in the specified ColorSpace. hasAlpha indicates whether alpha information is present. If hasAlpha is true, then the boolean isAlphaPremultiplied specifies how to interpret color and alpha samples in pixel values. If the boolean is true, color samples are assumed to have been multiplied by the alpha sample. The transparency specifies what alpha values can be represented by this color model. The transferType is the type of primitive array used to represent pixel values.
Parameters:
colorSpace - The ColorSpace associated with this color model.
hasAlpha - If true, this color model supports alpha.
isAlphaPremultiplied - If true, alpha is premultiplied.
transparency - Specifies what alpha values can be represented by this color model.
transferType - Specifies the type of primitive array used to represent pixel values, one of DataBuffer.TYPE_FLOAT or TYPE_DOUBLE.
Throws:
IllegalArgumentException - If the transfer type is not DataBuffer.TYPE_FLOAT or TYPE_DOUBLE.
See Also:
ColorSpace, Transparency
Method Detail

getRed

public int getRed(int pixel)
Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
Overrides:
getRed in class ComponentColorModel

getGreen

public int getGreen(int pixel)
Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
Overrides:
getGreen in class ComponentColorModel

getBlue

public int getBlue(int pixel)
Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
Overrides:
getBlue in class ComponentColorModel

getAlpha

public int getAlpha(int pixel)
Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
Overrides:
getAlpha in class ComponentColorModel

getRGB

public int getRGB(int pixel)
Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
Overrides:
getRGB in class ComponentColorModel

getRed

public int getRed(Object inData)
Returns the red color component for the specified pixel, scaled from 0 to 255 in the default RGB ColorSpace, sRGB. A color conversion is done if necessary. The pixel value is specified by an array of data elements of type transferType passed in as an object reference. The returned value will be a non pre-multiplied value. If the alpha is premultiplied, this method divides it out before returning the value (if the alpha value is 0, the red value will be 0).
Overrides:
getRed in class ComponentColorModel
Parameters:
inData - The pixel from which to get the red color component, specified by an array of data elements of type transferType.
Returns:
The red color component for the specified pixel, as an int.
Throws:
ClassCastException - If inData is not a primitive array of type transferType.
ArrayIndexOutOfBoundsException - if inData is not large enough to hold a pixel value for this ColorModel.

getGreen

public int getGreen(Object inData)
Returns the green color component for the specified pixel, scaled from 0 to 255 in the default RGB ColorSpace, sRGB. A color conversion is done if necessary. The pixel value is specified by an array of data elements of type transferType passed in as an object reference. The returned value will be a non pre-multiplied value. If the alpha is premultiplied, this method divides it out before returning the value (if the alpha value is 0, the green value will be 0).
Overrides:
getGreen in class ComponentColorModel
Parameters:
inData - The pixel from which to get the green color component, specified by an array of data elements of type transferType.
Returns:
The green color component for the specified pixel, as an int.
Throws:
ClassCastException - If inData is not a primitive array of type transferType.
ArrayIndexOutOfBoundsException - if inData is not large enough to hold a pixel value for this ColorModel.

getBlue

public int getBlue(Object inData)
Returns the blue color component for the specified pixel, scaled from 0 to 255 in the default RGB ColorSpace, sRGB. A color conversion is done if necessary. The pixel value is specified by an array of data elements of type transferType passed in as an object reference. The returned value will be a non pre-multiplied value. If the alpha is premultiplied, this method divides it out before returning the value (if the alpha value is 0, the blue value will be 0).
Overrides:
getBlue in class ComponentColorModel
Parameters:
inData - The pixel from which to get the blue color component, specified by an array of data elements of type transferType.
Returns:
The blue color component for the specified pixel, as an int.
Throws:
ClassCastException - If inData is not a primitive array of type transferType.
ArrayIndexOutOfBoundsException - if inData is not large enough to hold a pixel value for this ColorModel.

getAlpha

public int getAlpha(Object inData)
Returns the alpha component for the specified pixel, scaled from 0 to 255. The pixel value is specified by an array of data elements of type transferType passed in as an object reference. If the ColorModel does not have alpha, 255 is returned.
Overrides:
getAlpha in class ComponentColorModel
Parameters:
inData - The pixel from which to get the alpha component, specified by an array of data elements of type transferType.
Returns:
The alpha component for the specified pixel, as an int.
Throws:
IllegalArgumentException - if inData is null and the colorModel has alpha.
ClassCastException - If inData is not a primitive array of type transferType and the ColorModel has alpha.
ArrayIndexOutOfBoundsException - if inData is not large enough to hold a pixel value for this ColorModel and the ColorModel has alpha.

getRGB

public int getRGB(Object inData)
Returns the color/alpha components for the specified pixel in the default RGB color model format. A color conversion is done if necessary. The pixel value is specified by an array of data elements of type transferType passed in as an object reference. The returned value is in a non pre-multiplied format. If the alpha is premultiplied, this method divides it out of the color components (if the alpha value is 0, the color values will be 0).
Overrides:
getRGB in class ComponentColorModel
Parameters:
inData - The pixel from which to get the color/alpha components, specified by an array of data elements of type transferType.
Returns:
The color/alpha components for the specified pixel, as an int.
Throws:
ClassCastException - If inData is not a primitive array of type transferType.
ArrayIndexOutOfBoundsException - if inData is not large enough to hold a pixel value for this ColorModel.

getDataElements

public Object getDataElements(int rgb,
                              Object pixel)
Returns a data element array representation of a pixel in this ColorModel, given an integer pixel representation in the default RGB color model. This array can then be passed to the setDataElements method of a WritableRaster object. If the pixel parameter is null, a new array is allocated. If the colorSpaceType is of TYPE_GRAY then the rgb components are converted to gray using appropriate weights
Overrides:
getDataElements in class ComponentColorModel
Parameters:
rgb - An ARGB value packed into an int.
pixel - The float or double array representation of the pixel.
Throws:
ClassCastException - If pixel is not null and is not a primitive array of type transferType.
ArrayIndexOutOfBoundsException - If pixel is not large enough to hold a pixel value for this ColorModel.

getComponents

public int[] getComponents(int pixel,
                           int[] components,
                           int offset)
Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
Overrides:
getComponents in class ComponentColorModel

getComponents

public int[] getComponents(Object pixel,
                           int[] components,
                           int offset)
Throws an IllegalArgumentException since the pixel values cannot be placed into an int array.
Overrides:
getComponents in class ComponentColorModel

getDataElement

public int getDataElement(int[] components,
                          int offset)
Throws an IllegalArgumentException, since pixel values for this ColorModel are not conveniently representable as a single int.
Overrides:
getDataElement in class ComponentColorModel

getDataElements

public Object getDataElements(int[] components,
                              int offset,
                              Object obj)
Returns a data element array representation of a pixel in this ColorModel, given an array of unnormalized color/alpha components. This array can then be passed to the setDataElements method of a WritableRaster object.
Overrides:
getDataElements in class ComponentColorModel
Parameters:
components - An array of unnormalized color/alpha components.
offset - The integer offset into the components array.
obj - The object in which to store the data element array representation of the pixel. If obj variable is null, a new array is allocated. If obj is not null, it must be a primitive array of type transferType. An ArrayIndexOutOfBoundsException is thrown if obj is not large enough to hold a pixel value for this ColorModel.
Returns:
The data element array representation of a pixel in this ColorModel.
Throws:
IllegalArgumentException - If the components array is not large enough to hold all the color and alpha components (starting at offset).
ClassCastException - If obj is not null and is not a primitive array of type transferType.
ArrayIndexOutOfBoundsException - If obj is not large enough to hold a pixel value for this ColorModel.

coerceData

public ColorModel coerceData(WritableRaster raster,
                             boolean isAlphaPremultiplied)
Forces the raster data to match the state specified in the isAlphaPremultiplied variable, assuming the data is currently correctly described by this ColorModel. It may multiply or divide the color raster data by alpha, or do nothing if the data is in the correct state. If the data needs to be coerced, this method also returns an instance of FloatDoubleColorModel with the isAlphaPremultiplied flag set appropriately.
Overrides:
coerceData in class ComponentColorModel
Throws:
IllegalArgumentException - if transfer type of raster is not the same as that of this FloatDoubleColorModel.

isCompatibleRaster

public boolean isCompatibleRaster(Raster raster)
Returns true if the supplied Raster's SampleModel is compatible with this FloatDoubleColorModel.
Overrides:
isCompatibleRaster in class ComponentColorModel
Parameters:
raster - a Rasterto be checked for compatibility.

createCompatibleWritableRaster

public WritableRaster createCompatibleWritableRaster(int w,
                                                     int h)
Creates a WritableRaster with the specified width and height, that has a data layout (SampleModel) compatible with this ColorModel. The returned WritableRaster's SampleModel will be an instance of ComponentSampleModel.
Overrides:
createCompatibleWritableRaster in class ComponentColorModel
Parameters:
w - The width of the WritableRaster
h - The height of the WritableRaster
Returns:
A WritableRaster that is compatible with this ColorModel.
See Also:
WritableRaster, SampleModel

createCompatibleSampleModel

public SampleModel createCompatibleSampleModel(int w,
                                               int h)
Creates a SampleModel with the specified width and height that has a data layout compatible with this ColorModel. The returned SampleModel will be an instance of ComponentSampleModel.
Overrides:
createCompatibleSampleModel in class ComponentColorModel
Parameters:
w - The width of the SampleModel.
h - The height of the SampleModel.
Returns:
A SampleModel that is compatible with this ColorModel.
See Also:
SampleModel, ComponentSampleModel

isCompatibleSampleModel

public boolean isCompatibleSampleModel(SampleModel sm)
Checks whether or not the specified SampleModel is compatible with this ColorModel. A SampleModel is compatible if it is an instance of ComponentSampleModel, has the sample number of bands as the total number of components (including alpha) in the ColorSpace used by this ColorModel, and has the same data type (float or double) as this ColorModel.
Overrides:
isCompatibleSampleModel in class ComponentColorModel
Parameters:
sm - The SampleModel to test for compatibility.
Returns:
true if the SampleModel is compatible with this ColorModel, false if it is not.
See Also:
SampleModel, ComponentSampleModel

toString

public String toString()
Returns a String containing the values of all valid fields.
Overrides:
toString in class ColorModel