Package org.geotools.image.util
Class ColorUtilities
- Object
-
- ColorUtilities
-
public final class ColorUtilities extends 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
- Author:
- Martin Desruisseaux (IRD), Simone Giannecchini
-
-
Field Summary
Fields Modifier and Type Field Description static ComponentColorModel
GRAY_ALPHA_CM
static ComponentColorModel
GRAY_CM
static ComponentColorModel
RGB_ALPHA_CM
static ComponentColorModel
RGB_CM
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static IndexColorModel
applyBackgroundColor(IndexColorModel icm, Color bg)
Applies the specified background color to an index color model, building a new index color model (or returning the same index color mode if it has no transparency at all)static float
colorDistance(float[] lab1, float[] lab2)
Computes the distance E (CIE 1994) between two colors in LAB color space.static void
expand(Color[] colors, int[] ARGB, int lower, int upper)
Copiescolors
into arrayARGB
from indexlower
inclusive to indexupper
exclusive.static int
findColorIndex(Color bgColor, IndexColorModel icm)
Looks for the specified color in the color modelstatic int
getBitCount(int mapSize)
Returns a bit count for anIndexColorModel
mappingmapSize
colors.static int
getColorIndex(IndexColorModel colors, Color color, int exclude)
Returns the index of the specified color, excluding the specified one.static IndexColorModel
getIndexColorModel(int[] ARGB)
Returns an index color model for specified ARGB codes.static 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(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 theDataBuffer
type.static int
getTransferType(int mapSize)
Returns a suggered type for anIndexColorModel
ofmapSize
colors.static int
getTransparentPixel(IndexColorModel colors)
Returns the most transparent pixel in the specified color model.static boolean
isGrayPalette(IndexColorModel icm, boolean ignoreTransparents)
Tells us if a specificIndexColorModel
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 Color[]
subarray(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.
-
-
-
Field Detail
-
GRAY_CM
public static final ComponentColorModel GRAY_CM
-
GRAY_ALPHA_CM
public static final ComponentColorModel GRAY_ALPHA_CM
-
RGB_CM
public static final ComponentColorModel RGB_CM
-
RGB_ALPHA_CM
public static final ComponentColorModel RGB_ALPHA_CM
-
-
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 componentg
- the green componentb
- the blue componenta
- the alpha component- Throws:
IllegalArgumentException
- if ,g
,b
ora
are outside of the range 0 to 255, inclusive.
-
subarray
public static Color[] subarray(Color[] palette, int lower, int upper)
Returns a subarray of the specified color array. Thelower
andupper
index will be clamb into thepalette
range. If they are completly out of range, or if they would result in an empty array, thennull
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 benull
).lower
- The lower index, inclusive.upper
- The upper index, inclusive.- Returns:
- The subarray (may be
palette
if the original array already fit), ornull
if thelower
andupper
index are out ofpalette
bounds.
-
expand
public static void expand(Color[] colors, int[] ARGB, int lower, int upper)
Copiescolors
into arrayARGB
from indexlower
inclusive to indexupper
exclusive. Ifupper-lower
is not equals to the length ofcolors
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 theARGB
array.ARGB
- Array of integer to write ARGB values to.lower
- Index (inclusive) of the first element ofARGB
to change.upper
- Index (exclusive) of the last element ofARGB
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 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 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 anIndexColorModel
mappingmapSize
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 anIndexColorModel
ofmapSize
colors. This method returnsDataBuffer.TYPE_BYTE
orDataBuffer.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 returnscolor
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(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(IndexColorModel colors, 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(ColorModel model)
Tries to guess the number of bands from the specified color model. The recommanded approach is to invokeSampleModel.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(IndexColorModel icm, boolean ignoreTransparents)
Tells us if a specificIndexColorModel
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 theDataBuffer
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(Color bgColor, IndexColorModel icm)
Looks for the specified color in the color model- Parameters:
bgColor
- The color to be searchedicm
- The color model to be searched into- Returns:
- The index of the color in the color model, or -1 if not found
-
applyBackgroundColor
public static IndexColorModel applyBackgroundColor(IndexColorModel icm, Color bg)
Applies the specified background color to an index color model, building a new index color model (or returning the same index color mode if it has no transparency at all)
-
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.
-
-