java.awt.image
Class IndexColorModel

java.lang.Object
  extended by java.awt.image.ColorModel
      extended by java.awt.image.IndexColorModel
All Implemented Interfaces:
Transparency

public class IndexColorModel
extends ColorModel

Color model similar to pseudo visual in X11.

This color model maps linear pixel values to actual RGB and alpha colors. Thus, pixel values are indexes into the color map. Each color component is an 8-bit unsigned value.

The IndexColorModel supports a map of valid pixels, allowing the representation of holes in the the color map. The valid map is represented as a BigInteger where each bit indicates the validity of the map entry with the same index.

Colors can have alpha components for transparency support. If alpha component values aren't given, color values are opaque. The model also supports a reserved pixel value to represent completely transparent colors, no matter what the actual color component values are.

IndexColorModel supports anywhere from 1 to 16 bit index values. The allowed transfer types are DataBuffer.TYPE_BYTE and DataBuffer.TYPE_USHORT.


Field Summary
 
Fields inherited from class java.awt.image.ColorModel
pixel_bits, transferType
 
Fields inherited from interface java.awt.Transparency
BITMASK, OPAQUE, TRANSLUCENT
 
Constructor Summary
IndexColorModel(int bits, int size, byte[] reds, byte[] greens, byte[] blues)
          Creates a new indexed color model for size color elements with no alpha component.
IndexColorModel(int bits, int size, byte[] reds, byte[] greens, byte[] blues, byte[] alphas)
          Creates a new indexed color model for size color elements including alpha.
IndexColorModel(int bits, int size, byte[] reds, byte[] greens, byte[] blues, int trans)
          Creates a new indexed color model for size color elements.
IndexColorModel(int bits, int size, byte[] cmap, int start, boolean hasAlpha)
          Creates a new indexed color model using the color components in cmap.
IndexColorModel(int bits, int size, byte[] cmap, int start, boolean hasAlpha, int trans)
          Construct an IndexColorModel from an array of red, green, blue, and optional alpha components.
IndexColorModel(int bits, int size, int[] cmap, int start, boolean hasAlpha, int trans, int transferType)
          Construct an IndexColorModel from an array of size packed colors.
IndexColorModel(int bits, int size, int[] cmap, int start, int transferType, BigInteger validBits)
          Construct an IndexColorModel using a colormap with holes.
 
Method Summary
 BufferedImage convertToIntDiscrete(Raster raster, boolean forceARGB)
          Construct a BufferedImage with rgb pixel values from a Raster.
 SampleModel createCompatibleSampleModel(int w, int h)
          Creates a SampleModel that is compatible to this color model.
 int getAlpha(int pixel)
          Returns the alpha component of the color in the lookup table for the given pixel value.
 void getAlphas(byte[] a)
          Fills the supplied array with the alpha component of each color in the lookup table.
 int getBlue(int pixel)
          Returns the blue component of the color in the lookup table for the given pixel value.
 void getBlues(byte[] b)
          Fills the supplied array with the blue component of each color in the lookup table.
 int getGreen(int pixel)
          Returns the green component of the color in the lookup table for the given pixel value.
 void getGreens(byte[] g)
          Fills the supplied array with the green component of each color in the lookup table.
 int getMapSize()
          Returns the size of the color lookup table.
 int getRed(int pixel)
          Returns the red component of the color in the lookup table for the given pixel value.
 void getReds(byte[] r)
          Fills the supplied array with the red component of each color in the lookup table.
 int getRGB(int pixel)
          Get the RGB color value of the given pixel using the default RGB color model.
 void getRGBs(int[] rgb)
          Get the RGB color values of all pixels in the map using the default RGB color model.
 int getTransparentPixel()
          Get the index of the transparent color in this color model.
 BigInteger getValidPixels()
          Returns a binary value (BigInteger) where each bit represents an entry in the color lookup table.
 boolean isValid()
          Return true if all pixels are valid, false otherwise.
 boolean isValid(int pixel)
          Return true if the lookup table contains valid data for pixel, and false otherwise.
 
Methods inherited from class java.awt.image.ColorModel
coerceData, coerceDataWorker, createCompatibleWritableRaster, equals, finalize, getAlpha, getAlphaRaster, getBlue, getColorSpace, getComponents, getComponents, getComponentSize, getComponentSize, getDataElement, getDataElement, getDataElements, getDataElements, getDataElements, getGreen, getNormalizedComponents, getNormalizedComponents, getNumColorComponents, getNumComponents, getPixelSize, getRed, getRGB, getRGBdefault, getTransferType, getTransparency, getUnnormalizedComponents, hasAlpha, isAlphaPremultiplied, isCompatibleRaster, isCompatibleSampleModel, toString
 
Methods inherited from class java.lang.Object
clone, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

IndexColorModel

public IndexColorModel(int bits,
                       int size,
                       byte[] reds,
                       byte[] greens,
                       byte[] blues)
Creates a new indexed color model for size color elements with no alpha component. Each array must contain at least size elements. For each array, the i-th color is described by reds[i], greens[i] and blues[i].

Parameters:
bits - the number of bits needed to represent size colors.
size - the number of colors in the color map.
reds - the red component of all colors.
greens - the green component of all colors.
blues - the blue component of all colors.
Throws:
IllegalArgumentException - if bits < 1 or bits > 16.
NullPointerException - if any of the arrays is null.
ArrayIndexOutOfBoundsException - if size is greater than the length of the component arrays.

IndexColorModel

public IndexColorModel(int bits,
                       int size,
                       byte[] reds,
                       byte[] greens,
                       byte[] blues,
                       int trans)
Creates a new indexed color model for size color elements. Each array must contain at least size elements. For each array, the i-th color is described by reds[i], greens[i] and blues[i]. All the colors are opaque except for the transparent color.

Parameters:
bits - the number of bits needed to represent size colors
size - the number of colors in the color map
reds - the red component of all colors
greens - the green component of all colors
blues - the blue component of all colors
trans - the index of the transparent color (use -1 for no transparent color).
Throws:
IllegalArgumentException - if bits < 1 or bits > 16.
NullPointerException - if any of the arrays is null.
ArrayIndexOutOfBoundsException - if size is greater than the length of the component arrays.

IndexColorModel

public IndexColorModel(int bits,
                       int size,
                       byte[] reds,
                       byte[] greens,
                       byte[] blues,
                       byte[] alphas)
Creates a new indexed color model for size color elements including alpha. Each array must contain at least size elements. For each array, the i-th color is described by reds[i], greens[i], blues[i] and alphas[i].

Parameters:
bits - the number of bits needed to represent size colors.
size - the number of colors in the color map.
reds - the red component of all colors.
greens - the green component of all colors.
blues - the blue component of all colors.
alphas - the alpha component of all colors (null permitted).
Throws:
IllegalArgumentException - if bits < 1 or bits > 16.
NullPointerException - if reds, greens or blues is null.
ArrayIndexOutOfBoundsException - if size is greater than the length of the component arrays.

IndexColorModel

public IndexColorModel(int bits,
                       int size,
                       byte[] cmap,
                       int start,
                       boolean hasAlpha)
Creates a new indexed color model using the color components in cmap. If hasAlpha is true then cmap contains an alpha component after each of the red, green and blue components.

Parameters:
bits - the number of bits needed to represent size colors
size - the number of colors in the color map
cmap - packed color components
start - the offset of the first color component in cmap
hasAlpha - cmap has alpha values
Throws:
IllegalArgumentException - if bits < 1, bits > 16, or size < 1.
NullPointerException - if cmap is null.

IndexColorModel

public IndexColorModel(int bits,
                       int size,
                       byte[] cmap,
                       int start,
                       boolean hasAlpha,
                       int trans)
Construct an IndexColorModel from an array of red, green, blue, and optional alpha components. The component values are interleaved as RGB(A).

Parameters:
bits - the number of bits needed to represent size colors
size - the number of colors in the color map
cmap - interleaved color components
start - the offset of the first color component in cmap
hasAlpha - cmap has alpha values
trans - the index of the transparent color
Throws:
IllegalArgumentException - if bits < 1, bits > 16, or size < 1.
NullPointerException - if cmap is null.

IndexColorModel

public IndexColorModel(int bits,
                       int size,
                       int[] cmap,
                       int start,
                       boolean hasAlpha,
                       int trans,
                       int transferType)
Construct an IndexColorModel from an array of size packed colors. Each int element contains 8-bit red, green, blue, and optional alpha values packed in order. If hasAlpha is false, then all the colors are opaque except for the transparent color.

Parameters:
bits - the number of bits needed to represent size colors
size - the number of colors in the color map
cmap - packed color components
start - the offset of the first color component in cmap
hasAlpha - cmap has alpha values
trans - the index of the transparent color
transferType - DataBuffer.TYPE_BYTE or DataBuffer.TYPE_USHORT.
Throws:
IllegalArgumentException - if bits < 1, bits > 16, or size < 1.
IllegalArgumentException - if transferType is something other than DataBuffer.TYPE_BYTE or DataBuffer.TYPE_USHORT.

IndexColorModel

public IndexColorModel(int bits,
                       int size,
                       int[] cmap,
                       int start,
                       int transferType,
                       BigInteger validBits)
Construct an IndexColorModel using a colormap with holes.

The IndexColorModel is built from the array of ints defining the colormap. Each element contains red, green, blue, and alpha components. The ColorSpace is sRGB. The transparency value is automatically determined.

This constructor permits indicating which colormap entries are valid, using the validBits argument. Each entry in cmap is valid if the corresponding bit in validBits is set.

Parameters:
bits - the number of bits needed to represent size colors.
size - the number of colors in the color map.
cmap - packed color components.
start - the offset of the first color component in cmap.
transferType - DataBuffer.TYPE_BYTE or DataBuffer.TYPE_USHORT.
validBits - a map of the valid entries in cmap.
Throws:
IllegalArgumentException - if bits < 1, bits > 16, or size < 1.
IllegalArgumentException - if transferType is something other than DataBuffer.TYPE_BYTE or DataBuffer.TYPE_USHORT.
Method Detail

getMapSize

public final int getMapSize()
Returns the size of the color lookup table.

Returns:
The size of the color lookup table.

getTransparentPixel

public final int getTransparentPixel()
Get the index of the transparent color in this color model.

Returns:
The index of the color that is considered transparent, or -1 if there is no transparent color.

getReds

public final void getReds(byte[] r)
Fills the supplied array with the red component of each color in the lookup table.

Parameters:
r - an array that is at least as large as getMapSize().
Throws:
NullPointerException - if r is null.
ArrayIndexOutOfBoundsException - if r has less than getMapSize() elements.

getGreens

public final void getGreens(byte[] g)
Fills the supplied array with the green component of each color in the lookup table.

Parameters:
g - an array that is at least as large as getMapSize().
Throws:
NullPointerException - if g is null.
ArrayIndexOutOfBoundsException - if g has less than getMapSize() elements.

getBlues

public final void getBlues(byte[] b)
Fills the supplied array with the blue component of each color in the lookup table.

Parameters:
b - an array that is at least as large as getMapSize().
Throws:
NullPointerException - if b is null.
ArrayIndexOutOfBoundsException - if b has less than getMapSize() elements.

getAlphas

public final void getAlphas(byte[] a)
Fills the supplied array with the alpha component of each color in the lookup table. If the model has a transparent pixel specified, the alpha for that pixel will be 0.

Parameters:
a - an array that is at least as large as getMapSize().
Throws:
NullPointerException - if a is null.
ArrayIndexOutOfBoundsException - if a has less than getMapSize() elements.

getRed

public final int getRed(int pixel)
Returns the red component of the color in the lookup table for the given pixel value.

Specified by:
getRed in class ColorModel
Parameters:
pixel - the pixel lookup value.
Returns:
The red component of the color in the lookup table.
Throws:
ArrayIndexOutOfBoundsException - if pixel is negative.

getGreen

public final int getGreen(int pixel)
Returns the green component of the color in the lookup table for the given pixel value.

Specified by:
getGreen in class ColorModel
Parameters:
pixel - the pixel lookup value.
Returns:
The green component of the color in the lookup table.
Throws:
ArrayIndexOutOfBoundsException - if pixel is negative.
See Also:
ColorModel.getRed(int)

getBlue

public final int getBlue(int pixel)
Returns the blue component of the color in the lookup table for the given pixel value.

Specified by:
getBlue in class ColorModel
Parameters:
pixel - the pixel lookup value.
Returns:
The blue component of the color in the lookup table.
Throws:
ArrayIndexOutOfBoundsException - if pixel is negative.
See Also:
ColorModel.getRed(int)

getAlpha

public final int getAlpha(int pixel)
Returns the alpha component of the color in the lookup table for the given pixel value. If no alpha channel was specified when the color model was created, then 255 is returned for all pixels except the transparent pixel (if one is defined - see getTransparentPixel()) which returns an alpha of 0.

Specified by:
getAlpha in class ColorModel
Parameters:
pixel - the pixel lookup value.
Returns:
The alpha component of the color in the lookup table (in the range 0 to 255).
Throws:
ArrayIndexOutOfBoundsException - if pixel is negative.

getRGB

public final int getRGB(int pixel)
Get the RGB color value of the given pixel using the default RGB color model.

Overrides:
getRGB in class ColorModel
Parameters:
pixel - the pixel lookup value.
Returns:
The RGB color value.
Throws:
ArrayIndexOutOfBoundsException - if pixel is negative.

getRGBs

public final void getRGBs(int[] rgb)
Get the RGB color values of all pixels in the map using the default RGB color model.

Parameters:
rgb - The destination array.

isValid

public boolean isValid(int pixel)
Return true if the lookup table contains valid data for pixel, and false otherwise.

Parameters:
pixel - the pixel value used to index the color lookup table.
Returns:
true if pixel is valid, false otherwise.

isValid

public boolean isValid()
Return true if all pixels are valid, false otherwise.

Returns:
true if all pixels are valid, false otherwise.

getValidPixels

public BigInteger getValidPixels()
Returns a binary value (BigInteger) where each bit represents an entry in the color lookup table. If the bit is on, the entry is valid.

Returns:
The binary value.

convertToIntDiscrete

public BufferedImage convertToIntDiscrete(Raster raster,
                                          boolean forceARGB)
Construct a BufferedImage with rgb pixel values from a Raster. Constructs a new BufferedImage in which each pixel is an RGBA int from a Raster with index-valued pixels. If this model has no alpha component or transparent pixel, the type of the new BufferedImage is TYPE_INT_RGB. Otherwise the type is TYPE_INT_ARGB. If forceARGB is true, the type is forced to be TYPE_INT_ARGB no matter what.

Parameters:
raster - The source of pixel values.
forceARGB - True if type must be TYPE_INT_ARGB.
Returns:
New BufferedImage with RBGA int pixel values.

createCompatibleSampleModel

public SampleModel createCompatibleSampleModel(int w,
                                               int h)
Creates a SampleModel that is compatible to this color model. This will be a MultiPixelPackedSampleModel for bits/pixel of 1, 2 or 4, or a ComponentColorModel for the other cases.

Overrides:
createCompatibleSampleModel in class ColorModel
Parameters:
w - the width of the sample model to create
h - the height of the sample model to create
Returns:
a compatible sample model