org.geotools.resources.image
Class ColorUtilities

java.lang.Object
  extended by org.geotools.resources.image.ColorUtilities

public final class ColorUtilities
extends java.lang.Object

A set of static methods for handling of colors informations. Some of those methods are useful, but not really rigorous. This is why they do not appear in any "official" package, but instead in this private one. Do not rely on this API! It may change in incompatible way in any future version.

Since:
2.0
Version:
$Id: ColorUtilities.java 34937 2010-02-22 12:30:31Z danieleromagnoli $
Author:
Martin Desruisseaux (IRD), Simone Giannecchini

Method Summary
static float colorDistance(float[] lab1, float[] lab2)
          Computes the distance E (CIE 1994) between two colors in LAB color space.
static void expand(java.awt.Color[] colors, int[] ARGB, int lower, int upper)
          Copies colors into array ARGB from index lower inclusive to index upper exclusive.
static int findColorIndex(java.awt.Color bgColor, java.awt.image.IndexColorModel icm)
          Looks for the specified color in the color model
static int getBitCount(int mapSize)
          Returns a bit count for an IndexColorModel mapping mapSize colors.
static int getColorIndex(java.awt.image.IndexColorModel colors, java.awt.Color color, int exclude)
          Returns the index of the specified color, excluding the specified one.
static java.awt.image.IndexColorModel getIndexColorModel(int[] ARGB)
          Returns an index color model for specified ARGB codes.
static java.awt.image.IndexColorModel getIndexColorModel(int[] ARGB, int numBands, int visibleBand)
          Returns a tolerant index color model for the specified ARGB code.
static int getIntFromColor(int r, int g, int b, int a)
          Creates an sRGB color with the specified red, green, blue, and alpha values in the range (0 - 255).
static double getMaximum(int dataType)
          Provide the maximum allowe value for a certain data type.
static double getMinimum(int dataType)
          Provide the minimum allowe value for a certain data type.
static int getNumBands(java.awt.image.ColorModel model)
          Tries to guess the number of bands from the specified color model.
static double getThreshold(int dataType)
          Returns a suitable threshold depending on the DataBuffer type.
static int getTransferType(int mapSize)
          Returns a suggered type for an IndexColorModel of mapSize colors.
static int getTransparentPixel(java.awt.image.IndexColorModel colors)
          Returns the most transparent pixel in the specified color model.
static boolean isGrayPalette(java.awt.image.IndexColorModel icm, boolean ignoreTransparents)
          Tells us if a specific IndexColorModel contains only gray color or not, ignoring alpha information.
static int roundByte(double value)
          Rounds a float value and clamp the result between 0 and 255 inclusive.
static java.awt.Color[] subarray(java.awt.Color[] palette, int lower, int upper)
          Returns a subarray of the specified color array.
static float[] XYZtoLAB(float[] color)
          Transforms a color from XYZ color space to LAB.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getIntFromColor

public static int getIntFromColor(int r,
                                  int g,
                                  int b,
                                  int a)
Creates an sRGB color with the specified red, green, blue, and alpha values in the range (0 - 255).

Parameters:
r - the red component
g - the green component
b - the blue component
a - the alpha component
Throws:
java.lang.IllegalArgumentException - if , g, b or a are outside of the range 0 to 255, inclusive.

subarray

public static java.awt.Color[] subarray(java.awt.Color[] palette,
                                        int lower,
                                        int upper)
Returns a subarray of the specified color array. The lower and upper index will be clamb into the palette range. If they are completly out of range, or if they would result in an empty array, then null is returned. This method is used by org.geotools.cv.SampleDimension as an heuristic approach for distributing palette colors into a list of categories.

Parameters:
palette - The color array (may be null).
lower - The lower index, inclusive.
upper - The upper index, inclusive.
Returns:
The subarray (may be palette if the original array already fit), or null if the lower and upper index are out of palette bounds.

expand

public static void expand(java.awt.Color[] colors,
                          int[] ARGB,
                          int lower,
                          int upper)
Copies colors into array ARGB from index lower inclusive to index upper exclusive. If upper-lower is not equals to the length of colors array, then colors will be interpolated.

Note: Profiling shows that this method is a "hot spot". It needs to be fast, which is why the implementation is not as straight-forward as it could.

Parameters:
colors - Colors to copy into the ARGB array.
ARGB - Array of integer to write ARGB values to.
lower - Index (inclusive) of the first element of ARGB to change.
upper - Index (exclusive) of the last element of ARGB to change.

roundByte

public static int roundByte(double value)
Rounds a float value and clamp the result between 0 and 255 inclusive.


getIndexColorModel

public static java.awt.image.IndexColorModel getIndexColorModel(int[] ARGB)
Returns an index color model for specified ARGB codes. If the specified array has not transparent color (i.e. all alpha values are 255), then the returned color model will be opaque. Otherwise, if the specified array has one and only one color with alpha value of 0, the returned color model will have only this transparent color. Otherwise, the returned color model will be translucent.

Parameters:
ARGB - An array of ARGB values.
Returns:
An index color model for the specified array.

getIndexColorModel

public static java.awt.image.IndexColorModel getIndexColorModel(int[] ARGB,
                                                                int numBands,
                                                                int visibleBand)
Returns a tolerant index color model for the specified ARGB code. This color model accept image with the specified number of bands.

Parameters:
ARGB - An array of ARGB values.
numBands - The number of bands.
visibleBand - The band to display.
Returns:
An index color model for the specified array.

getBitCount

public static int getBitCount(int mapSize)
Returns a bit count for an IndexColorModel mapping mapSize colors. It is guaranteed that the following relation is hold:
(1 << getBitCount(mapSize)) >= mapSize


getTransferType

public static int getTransferType(int mapSize)
Returns a suggered type for an IndexColorModel of mapSize colors. This method returns DataBuffer.TYPE_BYTE or DataBuffer.TYPE_USHORT.


XYZtoLAB

public static float[] XYZtoLAB(float[] color)
Transforms a color from XYZ color space to LAB. The color are transformed in place. This method returns color for convenience. Reference: http://www.brucelindbloom.com/index.html?ColorDifferenceCalc.html


colorDistance

public static float colorDistance(float[] lab1,
                                  float[] lab2)
Computes the distance E (CIE 1994) between two colors in LAB color space. Reference: http://www.brucelindbloom.com/index.html?ColorDifferenceCalc.html


getTransparentPixel

public static int getTransparentPixel(java.awt.image.IndexColorModel colors)
Returns the most transparent pixel in the specified color model. If many colors has the same alpha value, than the darkest one is returned. This method never returns a negative value (0 is returned if the color model has no colors).

Parameters:
colors - The color model in which to look for a transparent color.
Returns:
The index of a transparent color, or 0.

getColorIndex

public static int getColorIndex(java.awt.image.IndexColorModel colors,
                                java.awt.Color color,
                                int exclude)
Returns the index of the specified color, excluding the specified one. If the color is not explicitly found, a close color is returned. This method never returns a negative value (0 is returned if the color model has no colors).

Parameters:
colors - The color model in which to look for a color index.
color - The color to search for.
exclude - An index to exclude from the search (usually the background or the transparent pixel), or -1 if none.
Returns:
The index of the color, or 0.

getNumBands

public static int getNumBands(java.awt.image.ColorModel model)
Tries to guess the number of bands from the specified color model. The recommanded approach is to invoke SampleModel.getNumBands(). This method should be used only as a fallback when the sample model is not available. This method uses some heuristic rules for guessing the number of bands, so the return value may not be exact in all cases.


isGrayPalette

public static boolean isGrayPalette(java.awt.image.IndexColorModel icm,
                                    boolean ignoreTransparents)
Tells us if a specific IndexColorModel contains only gray color or not, ignoring alpha information.

Parameters:
icm - IndexColorModel to be inspected.
ignoreTransparents - true if the RGB values of fully transparent pixels (the ones with an alpha value of 0) should not be taken in account during the check for gray color.
Returns:
true if the palette is grayscale, false otherwise.

getMinimum

public static double getMinimum(int dataType)
Provide the minimum allowe value for a certain data type.

Parameters:
dataType - the data type to suggest a maximum value for.
Returns:
the data type maximum value for.

getThreshold

public static double getThreshold(int dataType)
Returns a suitable threshold depending on the DataBuffer type.

Remember that the threshold works with >=.

Parameters:
dataType - to create a low threshold for.
Returns:
a minimum threshold value suitable for this data type.

findColorIndex

public static int findColorIndex(java.awt.Color bgColor,
                                 java.awt.image.IndexColorModel icm)
Looks for the specified color in the color model

Parameters:
bgColor - The color to be searched
icm - The color model to be searched into
Returns:
The index of the color in the color model, or -1 if not found

getMaximum

public static double getMaximum(int dataType)
Provide the maximum allowe value for a certain data type.

Parameters:
dataType - the data type to suggest a maximum value for.
Returns:
the data type maximum value for.


Copyright © 1996-2010 Geotools. All Rights Reserved.