|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.awt.image
类 ComponentColorModel
java.lang.Object java.awt.image.ColorModel java.awt.image.ComponentColorModel
- 所有已实现的接口:
- Transparency
-
public class ComponentColorModel
- extends ColorModel
使用像素值将颜色和 alpha 信息表示为独立样本的 ColorModel
类,该类以独立的数据元素存储每个样本。此类可以与任意 ColorSpace
一起使用。像素值中的颜色样本数必须与 ColorSpace
中的颜色分量数相同。可以有单个 alpha 样本。
对于那些使用 transferType
类型的基本数组像素表示形式的方法,数组的长度与颜色和 alpha 样本数相同。颜色样本存储在后跟 alpha 样本(如果存在)的数组的前面。颜色样本的顺序由 ColorSpace
指定。通常,此顺序反映颜色空间类型的名称。例如,对于 TYPE_RGB
,索引 0 对应于红色,索引 1 对应于绿色,索引 2 对应于蓝色。
出于显示或处理目的而执行的像素值到颜色/alpha 分量的转换是基于从样本到分量的一一对应关系进行的。由实例表示的像素样本值可以是有符号的或无符号的,也可以是整型或者 float 或 double 类型(有关细节请参见以下内容),具体取决于用来创建 ComponentColorModel
实例的传输类型。从样本值到标准化颜色/alpha 分量的转换必须遵循一定的规则。对于 float 和 double 样本,转换为一种标识,例如,标准化分量值等于相应的样本值。对于整数样本,转换应该只是样本缩放和偏移,其中每个分量的缩放和偏移常量可以有所不同。应用缩放和偏移常量的结果是形成一组颜色/alpha 分量值,这样可以保证这些值落到一定范围内。通常,颜色分量的范围将为由 ColorSpace
类的 getMinValue
和 getMaxValue
方法定义的范围。alpha 分量的范围应为从 0.0 到 1.0。
用传输类型 DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
和 DataBuffer.TYPE_INT
创建的 ComponentColorModel
的实例具有被视为无符号整数值的像素样本值。像素值的颜色或 alpha 样本中的位数可能不同于传递到 ComponentColorModel(ColorSpace, int[], boolean, boolean, int, int)
构造方法的相应颜色或 alpha 样本的位数。在这种情况下,此类假定样本值的 n 位最低有效位保存分量值,其中 n 为传递到构造方法的分量的有效位数。它还假定样本值中所有较高位都为零。因此,样本值的范围为 0 到 2n - 1。此类将这些样本值映射为标准化颜色分量值,以使 0 映射为从每个分量的 ColorSpace
的 getMinValue
方法得到的值,2n - 1 映射为从 getMaxValue
得到的值。创建具有不同颜色样本映射的 ComponentColorModel
需要子类化此类,并重写 getNormalizedComponents(Object, float[], int)
方法。alpha 样本的映射始终将 0 映射为 0.0,将 2n - 1 映射为 1.0。
对于带有无符号样本值的实例,仅当两个条件都具备时,非标准化的颜色/alpha 分量表示形式才受支持。首先,样本值 0 必须映射为标准化分量值 0.0,样本值 2n - 1 映射为 1.0。第二,ColorSpace
的所有颜色分量的最小值/最大取值范围必须为 0.0 到 1.0 之间。在这种情况下,分量表示形式为相应样本的 n 位最低有效位。因此,每个分量都为介于 0 和 2n - 1 之间的无符号整数值,其中 n 为特定分量的有效位数。如果未满足这些条件,则采用非标准化分量参数的任何方法都将抛出 IllegalArgumentException
。
用传输类型 DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
和 DataBuffer.TYPE_DOUBLE
创建的 ComponentColorModel
的实例具有被视为有符号的 short、float 或 double 值的像素样本值。此类实例不支持非标准化的颜色/alpha 分量表示形式,因此将此类表示形式用作参数在这些实例的其中之一上调用任何方法都将抛出 IllegalArgumentException
。此类实例的标准化分量的取值范围取决于传输类型,如下所示:对于 float 样本,则为 float 数据类型的完整范围;对于 double 样本,则为 float 数据类型(通过将 double 强制转换为 float 得到)的完整范围;对于 short 样本,大致为 -maxVal 到 +maxVal,其中 maxVal 为 ColorSpace
的每分量最大值(-32767 映射为 -maxVal,0 映射为 0.0,32767 映射为 +maxVal)。通过重写 getNormalizedComponents(Object, float[], int)
方法,子类可以重写 short 样本值到标准化分量值的缩放。对于 float 和 double 样本,标准化分量值被视为等于相应的样本值,子类不应试图添加这些传输类型的任何非标识缩放。
用传输类型 DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
和 DataBuffer.TYPE_DOUBLE
创建的 ComponentColorModel
的实例使用所有样本值的所有位。因此,使用 DataBuffer.TYPE_SHORT
时所有颜色/alpha 分量都有 16 位,使用 DataBuffer.TYPE_FLOAT
时都有 32,使用 DataBuffer.TYPE_DOUBLE
时都有 64 位。当构造方法的 ComponentColorModel(ColorSpace, int[], boolean, boolean, int, int)
形式与这些传输类型之一一起使用时,位数组参数将被忽略。
可能将不能合理解释的颜色/alpha 样本值视为用于呈现的分量值。当子类化 ComponentColorModel
以重写无符号样本值到标准化颜色分量值的映射时,或当使用某一范围之外的有符号样本值时,此现象可能发生。(例如,将 alpha 分量指定为范围 0 到 32767(即标准化范围 0.0 到 1.0)之外的有符号 short 值可能导致不可预料的结果)。应用程序负责在呈现之前适当缩放像素数据,以使颜色分量落在 ColorSpace
(使用 ColorSpace
的 getMinValue
和 getMaxValue
方法得到)的标准化范围内,并使 alpha 分量位于 0.0 和 1.0 之间。如果颜色或 alpha 分量超出这些范围,则呈现结果是不确定的。
使用单个 int 像素表示形式的方法抛出 IllegalArgumentException
,除非 ComponentColorModel
的分量数为 1 且分量值无符号,即使用 DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
或 DataBuffer.TYPE_INT
的传输类型的单个颜色分量,没有 alpha 分量。
ComponentColorModel
可以与 ComponentSampleModel
、BandedSampleModel
或 PixelInterleavedSampleModel
一起使用,以构造 BufferedImage
。
- 另请参见:
-
ColorModel
,ColorSpace
,ComponentSampleModel
,BandedSampleModel
,PixelInterleavedSampleModel
,BufferedImage
字段摘要 |
---|
从类 java.awt.image.ColorModel 继承的字段 |
---|
pixel_bits, transferType |
从接口 java.awt.Transparency 继承的字段 |
---|
BITMASK, OPAQUE, TRANSLUCENT |
构造方法摘要 | |
---|---|
ComponentColorModel(ColorSpace colorSpace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType) 根据指定参数构造 ComponentColorModel 。 |
|
ComponentColorModel(ColorSpace colorSpace, int[] bits, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType) 根据指定参数构造 ComponentColorModel 。 |
方法摘要 | |
---|---|
ColorModel |
coerceData(WritableRaster raster, boolean isAlphaPremultiplied) 强制使光栅数据与在 isAlphaPremultiplied 变量中指定的状态匹配,假定当前该数据已由此 ColorModel 正确描述。 |
SampleModel |
createCompatibleSampleModel(int w, int h) 用指定宽度和高度创建的 SampleModel ,具有与此 ColorModel 兼容的数据布局。 |
WritableRaster |
createCompatibleWritableRaster(int w, int h) 用指定宽度和高度创建的 WritableRaster ,具有与此 ColorModel 兼容的数据布局 (SampleModel )。 |
boolean |
equals(Object obj) 将此颜色模型与其他模型进行相等性比较。 |
int |
getAlpha(int pixel) 返回指定像素(缩放范围从 0 到 255)的 alpha 分量。 |
int |
getAlpha(Object inData) 返回指定像素(在 0 到 255 之间缩放)的 alpha 分量。 |
WritableRaster |
getAlphaRaster(WritableRaster raster) 返回表示某图像(从输入 Raster 提取)的 alpha 通道的 Raster 。 |
int |
getBlue(int pixel) 返回在默认的 RGB ColorSpace(即 sRGB)中从 0 到 255 缩放的指定像素的蓝色分量。 |
int |
getBlue(Object inData) 返回指定像素(在默认的 RGB ColorSpace sRGB 中缩放范围从 0 到 255)的蓝颜色分量。 |
int[] |
getComponents(int pixel, int[] components, int offset) 返回在 ColorModel 中已给定像素的非标准化颜色/alpha 分量。 |
int[] |
getComponents(Object pixel, int[] components, int offset) 返回在此 ColorModel 中已给定像素的非标准化颜色/alpha 分量的数组。 |
int |
getDataElement(float[] normComponents, int normOffset) 在已给定标准化颜色/alpha 分量的数组的情况下,返回以 int 类型表示在此 ColorModel 中的像素值。 |
int |
getDataElement(int[] components, int offset) 返回在 ColorModel 中表示为 int 的像素值(已给定非标准化颜色/alpha 分量的数组)。 |
Object |
getDataElements(float[] normComponents, int normOffset, Object obj) 在已给定标准化颜色/alpha 分量的数组的情况下,返回此 ColorModel 中像素的数据元素数组表示形式。 |
Object |
getDataElements(int[] components, int offset, Object obj) 在已给定非标准化颜色/alpha 分量的情况下,返回此 ColorModel 中像素的数据元素数组表示形式。 |
Object |
getDataElements(int rgb, Object pixel) 在默认 RGB 颜色模型中给定整数像素的表示形式的情况下,返回此 ColorModel 中像素的数据元素数组的表示形式。 |
int |
getGreen(int pixel) 返回在默认的 RGB ColorSpace(即 sRGB)中从 0 到 255 缩放的指定像素的绿色分量。 |
int |
getGreen(Object inData) 返回指定像素(在默认的 RGB ColorSpace ,即 sRGB,中缩放范围从 0 到 255)的绿色分量。 |
float[] |
getNormalizedComponents(int[] components, int offset, float[] normComponents, int normOffset) 在给定标准化分量数组的情况下,返回以标准化形式存在的所有颜色/alpha 分量的数组。 |
float[] |
getNormalizedComponents(Object pixel, float[] normComponents, int normOffset) 返回已在 ColorModel 中给定了像素的标准化形式颜色/alpha 分量的数组。 |
int |
getRed(int pixel) 返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的红色分量。 |
int |
getRed(Object inData) 返回在默认的 RGB ColorSpace(即 sRGB)中从 0 到 255 缩放的指定像素的红色分量。 |
int |
getRGB(int pixel) 返回默认的 RGB 颜色模型格式中像素的颜色/alpha 分量。 |
int |
getRGB(Object inData) 返回默认的 RGB 颜色模型格式中的像素的颜色/alpha 分量。 |
int[] |
getUnnormalizedComponents(float[] normComponents, int normOffset, int[] components, int offset) 在已给定标准化分量数组的情况下,返回以非标准化形式存在的所有颜色/alpha 分量的数组。 |
boolean |
isCompatibleRaster(Raster raster) 如果 raster 与此 ColorModel 兼容,则返回 true;如果不兼容,则返回 false。 |
boolean |
isCompatibleSampleModel(SampleModel sm) 检查指定 SampleModel 是否与此 ColorModel 兼容。 |
从类 java.awt.image.ColorModel 继承的方法 |
---|
finalize, getColorSpace, getComponentSize, getComponentSize, getNumColorComponents, getNumComponents, getPixelSize, getRGBdefault, getTransferType, getTransparency, hasAlpha, hashCode, isAlphaPremultiplied, toString |
从类 java.lang.Object 继承的方法 |
---|
clone, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
ComponentColorModel
public ComponentColorModel(ColorSpace colorSpace, int[] bits, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType)
-
根据指定参数构造
ComponentColorModel
。颜色分量将在指定的ColorSpace
中。受支持的传输类型为DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
、DataBuffer.TYPE_INT
、DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
和DataBuffer.TYPE_DOUBLE
。如果不为 null,则bits
数组指定每个颜色和 alpha 分量的有效位数,并且如果像素值中不存在 alpha 信息,则其长度至少应该是ColorSpace
中分量数,如果存在 alpha 信息,则其长度大于此数。当transferType
为DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
或DataBuffer.TYPE_DOUBLE
时,忽略bits
数组参数。hasAlpha
指示是否存在 alpha 信息。如果hasAlpha
为 true,则布尔值isAlphaPremultiplied
指定如何解释像素值中的颜色和 alpha 样本。如果布尔值为 true,则假定颜色样本已与 alpha 样本相乘。transparency
指定可以由此颜色模型表示的 alpha 值。可以接受的transparency
值为OPAQUE
、BITMASK
或TRANSLUCENT
。transferType
是用于表示像素值的基本数组的类型。- 参数:
-
colorSpace
- 与此颜色模型关联的ColorSpace
。 -
bits
- 每个分量的有效位数。可以为 null,在这种情况下,所有分量样本的所有位都将有效。忽略,如果 transferType 为DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
或DataBuffer.TYPE_DOUBLE
之一,在这种情况下,所有分量样本的所有位都将有效。 -
hasAlpha
- 如果为 true,则此颜色模型支持 alpha。 -
isAlphaPremultiplied
- 如果为 true,则 alpha 预乘的。 -
transparency
- 指定可以由此颜色模型表示的 alpha 值。 -
transferType
- 指定用于表示像素值的基本数组的类型。 - 抛出:
-
IllegalArgumentException
- 如果bits
数组参数不为 null,则其长度小于颜色和 alpha 分量数,且 transferType 为DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
或DataBuffer.TYPE_INT
之一。 -
IllegalArgumentException
- 如果 transferType 不为DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
、DataBuffer.TYPE_INT
、DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
或DataBuffer.TYPE_DOUBLE
之一。 - 另请参见:
-
ColorSpace
,Transparency
ComponentColorModel
public ComponentColorModel(ColorSpace colorSpace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType)
-
根据指定参数构造
ComponentColorModel
。颜色分量将在指定的ColorSpace
中。受支持的传输类型为DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
、DataBuffer.TYPE_INT
、DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
和DataBuffer.TYPE_DOUBLE
。每个颜色和 alpha 分量的有效位数都分别为 8、16、32、16、32 或 64。颜色分量数为ColorSpace
中的分量数。如果hasAlpha
为true
,则存在 alpha 分量。如果hasAlpha
为 true,则布尔值isAlphaPremultiplied
指定如何解释像素值中的颜色和 alpha 样本。如果布尔值为 true,则假定颜色样本已与 alpha 样本相乘。transparency
指定可以由此颜色模型表示的 alpha 值。可以接受的transparency
值为OPAQUE
、BITMASK
或TRANSLUCENT
。transferType
是用于表示像素值的基本数组的类型。- 参数:
-
colorSpace
- 与此颜色模型关联的ColorSpace
。 -
hasAlpha
- 如果为 true,则此颜色模型支持 alpha。 -
isAlphaPremultiplied
- 如果为 true,则 alpha 预乘的。 -
transparency
- 指定可以由此颜色模型表示的 alpha 值。 -
transferType
- 指定用于表示像素值的基本数组的类型。 - 抛出:
-
IllegalArgumentException
- 如果 transferType 不为DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
、DataBuffer.TYPE_INT
、DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
或DataBuffer.TYPE_DOUBLE
之一。 - 从以下版本开始:
- 1.4
- 另请参见:
-
ColorSpace
,Transparency
方法详细信息 |
---|
getRed
public int getRed(int pixel)
- 返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的红色分量。如有必要,可进行颜色转换。将像素值指定为 int。返回的值为非预先乘得的值。如果与 alpha 预先相乘,此方法将在返回值(alpha 值为 0,则红色值将为 0)之前将其除出来。
-
- 指定者:
-
类
ColorModel
中的getRed
-
- 参数:
-
pixel
- 要从中获取红色分量的像素。 - 返回:
- 指定像素(int 类型)的红色分量。
- 抛出:
-
IllegalArgumentException
- 如果此ColorModel
中有一个以上的分量。 -
IllegalArgumentException
- 如果此ColorModel
的分量值为有符号的。
getGreen
public int getGreen(int pixel)
- 返回在默认的 RGB ColorSpace(即 sRGB)中从 0 到 255 缩放的指定像素的绿色分量。如有必要,可进行颜色转换。将像素值指定为 int。返回的值为非预先乘得的值。如果与 alpha 预先相乘,此方法将在返回值(alpha 值为 0,则绿色值将为 0)之前将其除出来。
-
- 指定者:
-
类
ColorModel
中的getGreen
-
- 参数:
-
pixel
- 要从中获取绿色分量的像素。 - 返回:
- 指定像素(int 类型)的绿色分量。
- 抛出:
-
IllegalArgumentException
- 如果此ColorModel
中有一个以上的分量。 -
IllegalArgumentException
- 如果此ColorModel
的分量值为有符号的。
getBlue
public int getBlue(int pixel)
- 返回在默认的 RGB ColorSpace(即 sRGB)中从 0 到 255 缩放的指定像素的蓝色分量。如有必要,可进行颜色转换。将像素值指定为 int。返回的值为非预先乘得的值。如果与 alpha 预先相乘,此方法将在返回值(alpha 值为 0,则蓝色值将为 0)之前将其除出来。
-
- 指定者:
-
类
ColorModel
中的getBlue
-
- 参数:
-
pixel
- 要从中获取蓝色分量的像素。 - 返回:
- 指定像素(int 类型)的蓝色分量。
- 抛出:
-
IllegalArgumentException
- 如果此ColorModel
中有一个以上的分量。 -
IllegalArgumentException
- 如果此ColorModel
的分量值为有符号的。
getAlpha
public int getAlpha(int pixel)
- 返回指定像素(缩放范围从 0 到 255)的 alpha 分量。像素值指定为 int。
-
- 指定者:
-
类
ColorModel
中的getAlpha
-
- 参数:
-
pixel
- 要从中获取 alpha 分量的像素。 - 返回:
- 指定像素(int 类型)的 alpha 分量。
- 抛出:
-
IllegalArgumentException
- 如果此ColorModel
中有一个以上的分量。 -
IllegalArgumentException
- 如果此ColorModel
的分量值为有符号的。
getRGB
public int getRGB(int pixel)
- 返回默认的 RGB 颜色模型格式中像素的颜色/alpha 分量。如有必要,可进行颜色转换。返回的值是非预乘格式。如果与 alpha 预先相乘,此方法会将其从颜色分量(如果 alpha 值为 0,则颜色值为 0)中除出来。
-
- 覆盖:
-
类
ColorModel
中的getRGB
-
- 参数:
-
pixel
- 要从中获取颜色/alpha 分量的像素。 - 返回:
- 指定像素(int 类型)的颜色/alpha 分量。
- 抛出:
-
IllegalArgumentException
- 如果此ColorModel
中有一个以上的分量。 -
IllegalArgumentException
- 如果此ColorModel
的分量值为有符号的。 - 另请参见:
-
ColorModel.getRGBdefault()
getRed
public int getRed(Object inData)
-
返回在默认的 RGB ColorSpace(即 sRGB)中从 0 到 255 缩放的指定像素的红色分量。如有必要,可进行颜色转换。
pixel
值由作为对象引用而传入的类型transferType
的数据元素的数组指定。返回的值为非预先乘得的值。如果与 alpha 预先相乘,此方法将在返回值(alpha 值为 0,则红色值将为 0)之前将其除出来。因为ComponentColorModel
可以子类化,所以子类可以继承此方法的实现,并且如果不重写此方法,则当它们使用不受支持的transferType
时,将抛出异常。 -
- 覆盖:
-
类
ColorModel
中的getRed
-
- 参数:
-
inData
- 要从中获取红色分量(由类型transferType
的数据元素的数组指定)的像素。 - 返回:
- 指定像素(int 类型)的红色分量。
- 抛出:
-
ClassCastException
- 如果inData
不为类型transferType
的基本数组。 -
ArrayIndexOutOfBoundsException
- 如果inData
不是特别大,不能保存此ColorModel
的像素值。 -
UnsupportedOperationException
- 如果此ComponentColorModel
的传输类型不为以下受支持的传输类型之一:DataBuffer.TYPE_BYTE
、DataBuffer.TYPE_USHORT
、DataBuffer.TYPE_INT
、DataBuffer.TYPE_SHORT
、DataBuffer.TYPE_FLOAT
或DataBuffer.TYPE_DOUBLE
。