java.lang.Object java.awt.image.ColorModel
public abstract class ColorModel
此 ColorModel
抽象类封装了将像素值转换为颜色分量(例如,红色、绿色和蓝色)和 alpha 分量的方法。为了将图像呈现到屏幕、打字机或其他图像上,必须将像素值转换为颜色和 alpha 分量。与此类方法的参数或返回值一样,可以把像素表示为 32 位 int,或表示为基本类型的数组。ColorModel
颜色分量的数量、顺序和解释由其 ColorSpace
指定。与未包含 alpha 信息的像素数据一起使用的 ColorModel
将所有像素视为不透明的(alpha 值为 1.0)。
此 ColorModel
类支持像素值的两种表示形式。像素值可以为单个 32 位 int,也可以为一个基本类型的数组。Java(tm) Platform 1.0 和 1.1 API 将像素表示为单 byte
或单 int
值。根据此 ColorModel
类用途,可按 int 形式传递像素值参数。Java(tm) 2 Platform API 引入了表示图像的其他类。对于 BufferedImage
或 RenderedImage
对象(基于 Raster
和 SampleModel
类),像素值用单个 int 表示可能不太方便。因此,ColorModel
现在提供了以基本类型数组表示像素值的方法。特定 ColorModel
对象使用的基本类型被称作其转换类型。
当调用采用单个 int 像素参数的方法时,与其像素值不便于表示为单个 int 的图像一起使用的 ColorModel
对象会抛出 IllegalArgumentException
。ColorModel
的子类必须指定出现这种情况的条件。对于 DirectColorModel
或 IndexColorModel
对象,不会出现这种情况。
当前,受 Java 2D(tm) API 支持的转换类型有 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT、DataBuffer.TYPE_INT、DataBuffer.TYPE_SHORT、DataBuffer.TYPE_FLOAT 和 DataBuffer.TYPE_DOUBLE。当使用 ColorModel 和这些类型中前三个类型的图像时,多数呈现操作都会被更快地执行。而 ColorModel 和后三种类型的图像可能不支持某些图像的过滤操作。在创建特定 ColorModel
对象时,通常会显式或默认指定该对象的转换类型。ColorModel
的所有子类必须指定可能的转换类型和如何确定表示像素基本数组中元素的数量。
对于 BufferedImages
,其 Raster
和该 Raster
对象的 SampleModel
(从这些类的 getTransferType
方法中获得)的转换类型必须与 ColorModel
的转换类型匹配。表示 Raster
和 SampleModel
(从这些类的 getNumDataElements
方法中获得)的像素的数组中的元素数量必须与 ColorModel
的数量匹配。
用于将像素值转换为颜色和 alpha 分量的算法随子类不同而不同。例如,从 BufferedImage
对象的 Raster
和颜色/alpha 分量的 SampleModel
中得到的样本之间不需要一一对应。即使有此对应关系,样本中的位数也不必与相应的颜色/alpha 分量中的位数相同。每个子类必须指定如何从像素值到颜色/alpha 分量的转换。
该 ColorModel
类中的方法使用两种不同的颜色和 alpha 分量表示形式:标准化形式和非标准化形式。在标准化形式中,每个分量都是介于某个最小值和最大值之间的 float
值。对于 alpha 分量,最小值为 0.0,最大值为 1.0。对于颜色分量,每个分量的最小值和最大值可以从 ColorSpace
对象中得到。这些值通常为 0.0 和 1.0(例如,默认 sRGB 颜色空间的标准化分量值的范围为 0.0 到 1.0),但某些颜色空间的分量值可能有不同的上限和下限。这些极限值可以使用 ColorSpace
类的 getMinValue
和 getMaxValue
方法得到。标准化的颜色分量值未预乘。所有 ColorModels
必须支持标准化形式。
在非标准化形式中,每个分量都是 0 和 2n - 1 之间的无符号整数值,其中 n 为特定分量的有效位数。如果特定 ColorModel
的像素值表示预乘了 alpha 样本的颜色样本,则非标准化颜色分量也要预乘。非标准化形式只能与其 ColorSpace
所有分量的最小值为 0.0,所有分量的最大值为 1.0 的 ColorModel
的实例一起使用。颜色和 alpha 分量的非标准化形式可以是其标准化分量值都位于 0.0 和 1.0 之间的 ColorModels
的便捷表示形式。在这种情况下,整数值 0 映射到 0.0,而值 2n - 1 映射到 1.0。其他情况下,如标准化分量值可以为负数或正数、非标准化形式不方便使用。当调用包含非标准化参数的方法时,此类 ColorModel
对象将抛出 IllegalArgumentException
。ColorModel
的子类必须指定出现这种情况的条件。
IndexColorModel
,
ComponentColorModel
,
PackedColorModel
,
DirectColorModel
,
Image
,
BufferedImage
,
RenderedImage
,
ColorSpace
,
SampleModel
,
Raster
,
DataBuffer
字段摘要 | |
---|---|
protected int |
pixel_bits 像素总位数。 |
protected int |
transferType 用于表示像素值的数组的数据类型。 |
从接口 java.awt.Transparency 继承的字段 |
---|
BITMASK, OPAQUE, TRANSLUCENT |
构造方法摘要 | |
---|---|
|
ColorModel(int bits) 构造 ColorModel ,将指定位数的像素转换为颜色/alpha 分量。 |
protected |
ColorModel(int pixel_bits, int[] bits, ColorSpace cspace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType) 构造将像素值转换为颜色/alpha 分量的 ColorModel 。 |
方法摘要 | |
---|---|
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) 测试指定的 Object 是否是 ColorModel 的实例,以及它是否等于此 ColorModel 。 |
void |
finalize() 一旦不再引用此 ColorModel ,就要释放与此 ColorModel 相关的系统资源。 |
abstract int |
getAlpha(int pixel) 返回指定像素(缩放范围从 0 到 255)的 alpha 分量。 |
int |
getAlpha(Object inData) 返回指定像素(在 0 到 255 之间缩放)的 alpha 分量。 |
WritableRaster |
getAlphaRaster(WritableRaster raster) 返回表示图像(从输入 Raster 中提取)的 alpha 通道的 Raster ,除非此 ColorModel 的像素值将颜色和 alpha 信息表示为独立的空间 band(如 ComponentColorModel 和 DirectColorModel )。 |
abstract int |
getBlue(int pixel) 返回指定像素的蓝色分量的值,指定像素在默认的 RGB ColorSpace(即 sRGB)中缩放范围是 0 到 255。 |
int |
getBlue(Object inData) 返回指定像素的蓝颜色分量,指定像素在默认的 RGB ColorSpace (即 sRGB)中缩放范围是 0 到 255。 |
ColorSpace |
getColorSpace() 返回与此 ColorModel 相关的 ColorSpace 。 |
int[] |
getComponents(int pixel, int[] components, int offset) 返回在 ColorModel 中已给定像素的非标准化颜色/alpha 分量。 |
int[] |
getComponents(Object pixel, int[] components, int offset) 返回在此 ColorModel 中已给定像素的非标准化颜色/alpha 分量的数组。 |
int[] |
getComponentSize() 返回每个颜色/alpha 分量的位数数组。 |
int |
getComponentSize(int componentIdx) 返回指定颜色/alpha 分量的位数。 |
int |
getDataElement(float[] normComponents, int normOffset) 在已给定标准化颜色/alpha 分量的数组的情况下,返回以 int 类型表示在此 ColorModel 中的像素值。 |
int |
getDataElement(int[] components, int offset) 在已给定非标准化颜色/alpha 分量的数组的情况下,返回此 ColorModel 中以 int 类型表示的像素值。 |
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 中像素的数据元素数组的表示形式。 |
abstract 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 |
getNumColorComponents() 返回此 ColorModel 中颜色分量数。 |
int |
getNumComponents() 返回此 ColorModel 中分量数(包括 alpha 分量数)。 |
int |
getPixelSize() 返回由此 ColorModel 描述的每像素的位数。 |
abstract 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 分量。 |
static ColorModel |
getRGBdefault() 返回描述整数 RGB 值的默认格式的 DirectColorModel ,该整数 RGB 值可以在便于程序员使用的 AWT 图像接口中的许多方法中使用。 |
int |
getTransferType() 返回此 ColorModel 的转换类型。 |
int |
getTransparency() 返回透明度。 |
int[] |
getUnnormalizedComponents(float[] normComponents, int normOffset, int[] components, int offset) 在已给定标准化分量数组的情况下,返回以非标准化形式存在的所有颜色/alpha 分量的数组。 |
boolean |
hasAlpha() 返回此 ColorModel 中是否支持 alpha。 |
int |
hashCode() 返回此 ColorModel 的哈希码。 |
boolean |
isAlphaPremultiplied() 返回是否在由此 ColorModel 转换的像素值中预乘 alpha。 |
boolean |
isCompatibleRaster(Raster raster) 如果 raster 与此 ColorModel 兼容,则返回 true ,如果不兼容,则返回 false 。 |
boolean |
isCompatibleSampleModel(SampleModel sm) 检查 SampleModel 是否与此 ColorModel 兼容。 |
String |
toString() 返回此 ColorModel 对象的内容的 String 表示形式。 |
从类 java.lang.Object 继承的方法 |
---|
clone, getClass, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
protected int pixel_bits
protected int transferType
构造方法详细信息 |
---|
public ColorModel(int bits)
ColorModel
,将指定位数的像素转换为颜色/alpha 分量。颜色空间默认为 RGB
ColorSpace
(即 sRGB)。假定像素值包含 alpha 信息。如果像素值中的颜色和 alpha 信息表示为独立的空间 band,则假定颜色 band 未与 alpha 值预乘。透明度类型为 java.awt.Transparency.TRANSLUCENT。转换类型将为可以存储单个像素的 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT 或 DataBuffer.TYPE_INT 中的最小者(或 DataBuffer.TYPE_UNDEFINED,如果位数大于 32)。因为此构造方法没有关于每个颜色和 alpha 分量的位数信息,所以任何调用此构造方法的子类都应该重写需要此信息的所有方法。
bits
- 像素的位数
IllegalArgumentException
- 如果
bits
中的位数小于 1
protected ColorModel(int pixel_bits, int[] bits, ColorSpace cspace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType)
ColorModel
。颜色分量将位于指定的
ColorSpace
中。
pixel_bits
为像素值中的位数。位数组指定每个颜色和 alpha 分量的有效位数。如果像素值中不包含 alpha 信息,则其长度应为
ColorSpace
中的分量数;如果包含 alpha 信息,则其长度比此数要大。
hasAlpha
指示是否存在 alpha 信息。
boolean
isAlphaPremultiplied
指定如何解释像素值,其中颜色和 alpha 信息表示为独立的空间 band。如果
boolean
为
true
,则假定颜色样本已经与 alpha 样本相乘。该
transparency
指定可以由此颜色模型表示的 alpha 值。转换类型是用于表示像素值的基本数组的类型。注意,位数组包含从像素值转换后每个颜色/alpha 分量的有效位数。例如,对于
pixel_bits
等于 16 的
IndexColorModel
,该位数组可能有四个每个元素都设置为 8 的元素。
pixel_bits
- 像素值中的位数
bits
- 指定每个颜色和 alpha 分量的有效位数的数组
cspace
- 指定
ColorSpace
hasAlpha
-
true
如果包含 alpha 信息;否则为
false
isAlphaPremultiplied
-
true
如果假定颜色样本预乘了 alpha 样本;否则为
false
transparency
- 可以由此颜色模型表示的 alpha 值
transferType
- 用于表示像素值的数组类型
IllegalArgumentException
- 如果位数组的长度小于此
ColorModel
中颜色或 alpha 分量的数量,或者透明度不为有效值。
IllegalArgumentException
- 如果
bits
中位数的和小于 1,或者
bits
中任何一个元素小于 0。
Transparency
方法详细信息 |
---|
public static ColorModel getRGBdefault()
DirectColorModel
,该整数 RGB 值可以在便于程序员使用的 AWT 图像接口中的许多方法中使用。颜色空间为默认的
ColorSpace
(即 sRGB)。RGB 值的格式是一个 8 位的整数,从最高有效字节到最低有效字节的相应顺序排列 alpha、红色、绿色和蓝色颜色分量,格式如下:0xAARRGGBB。颜色分量未与 alpha 分量预乘。此格式不一定表示特定设备或所有图像的本机或最有效的
ColorModel
。它只是一种通用的颜色模型格式。
DirectColorModel
对象。
public final boolean hasAlpha()
ColorModel
中是否支持 alpha。
ColorModel
中支持 alpha,则返回
true
;否则返回
false
。
public final boolean isAlphaPremultiplied()
ColorModel
转换的像素值中预乘 alpha。如果布尔变量为
true
,则使用此
ColorModel
解释其中颜色和 alpha 信息表示为独立空间 band 的像素值,并且假定颜色样本已经与 alpha 样本相乘。
ColorModel
转换的像素值中预乘 alpha 值,则返回
true
;否则返回
false
。
public final int getTransferType()
ColorModel
的转换类型。该转换类型是一个基本数组类型,可用来以数组形式表示像素值。
public int getPixelSize()
ColorModel
描述的每像素的位数。
public int getComponentSize(int componentIdx)
ColorSpace
中指定的顺序索引颜色分量。通常,此顺序反映了颜色空间类型的名称。例如,对于 TYPE_RGB,索引 0 对应于红色,索引 1 对应于绿色,索引 2 对应于蓝色。如果此
ColorModel
支持 alpha,则该 alpha 分量对应于最后一个颜色分量后面的索引。
componentIdx
- 颜色/alpha 分量的索引
ArrayIndexOutOfBoundsException
- 如果
componentIdx
大于分量数或小于 0
NullPointerException
- 如果位数数组为
null
public int[] getComponentSize()
ColorSpace
指定的顺序排列的颜色分量,后面是 alpha 分量(如果存在)。
public int getTransparency()
Transparency
中的
getTransparency
ColorModel
的透明度。
Transparency.OPAQUE
,
Transparency.BITMASK
,
Transparency.TRANSLUCENT
public int getNumComponents()
ColorModel
中分量数(包括 alpha 分量数)。此分量数等于颜色分量数,或者加 1(如果存在 alpha 分量)。
ColorModel
中分量数
public int getNumColorComponents()
ColorModel
中颜色分量数。这是
ColorSpace.getNumComponents()
返回的分量数。
ColorModel
中颜色分量数。
ColorSpace.getNumComponents()
public abstract int getRed(int pixel)
ColorModel
的像素值不便于用单个 int 表示,则抛出
IllegalArgumentException
。返回的值不是预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则红色值为 0。
pixel
- 指定的像素
public abstract int getGreen(int pixel)
ColorModel
的像素值不便于用单个 int 表示,则抛出
IllegalArgumentException
。返回的值是一个非预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则绿色值为 0。
pixel
- 指定的像素
public abstract int getBlue(int pixel)
ColorModel
的像素值不便于用单个 int 表示,则抛出
IllegalArgumentException
。返回的值为非预先乘得的值,例如,如果与 alpha 预先相乘,此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则蓝色值为 0。
pixel
- 指定的像素
public abstract int getAlpha(int pixel)
ColorModel
的像素值不便于用单个 int 表示,则抛出
IllegalArgumentException
。
pixel
- 指定的像素
public int getRGB(int pixel)
ColorModel
的像素值不便于用单个 int 表示,则抛出
IllegalArgumentException
。返回的值是非预乘格式。例如,如果预乘 alpha,此方法会将 alpha 从颜色分量中除出来。如果 alpha 值为 0,则颜色值为 0。
pixel
- 指定的像素
getRGBdefault()
public int getRed(Object inData)
ColorSpace
(即 sRGB)中缩放范围是 0 到 255。如有必要,可进行颜色转换。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。返回的值是一个非预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则红色值为 0。如果
inData
不为类型 transferType 的基本数组,则抛出
ClassCastException
。如果
inData
不是特别大,不能存储此
ColorModel
的像素值,则抛出
ArrayIndexOutOfBoundsException
。如果此
transferType
不受支持,则抛出
UnsupportedOperationException
。因为
ColorModel
为抽象类,所以任何实例必须是子类的实例。子类可以继承此方法的实现,并且如果子类未重写此方法,则在该子类使用除
DataBuffer.TYPE_BYTE
、
DataBuffer.TYPE_USHORT
或
DataBuffer.TYPE_INT
之外的
transferType
时,此方法将抛出异常。
inData
- 像素值的数组
ClassCastException
- 如果
inData
不为类型
transferType
的基本数组
ArrayIndexOutOfBoundsException
- 如果
inData
不是特别大,不能存储此
ColorModel
的像素值
UnsupportedOperationException
- 如果此
tranferType
不受此
ColorModel
支持
public int getGreen(Object inData)
ColorSpace
(即 sRGB)中缩放范围是 0 到 255)。如有必要,可进行颜色转换。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。返回的值为非预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则绿色值为 0。如果
inData
不为类型 transferType 的基本数组,则抛出
ClassCastException
。如果
inData
不是特别大,不能存储此
ColorModel
的像素值,则抛出
ArrayIndexOutOfBoundsException
。如果此
transferType
不受支持,则抛出
UnsupportedOperationException
。因为
ColorModel
为抽象类,所以任何实例必须是子类的实例。子类可以继承此方法的实现,并且如果子类未重写此方法,则在该子类使用除
DataBuffer.TYPE_BYTE
、
DataBuffer.TYPE_USHORT
或
DataBuffer.TYPE_INT
之外的
transferType
时,此方法将抛出异常。
inData
- 像素值的数组
ClassCastException
- 如果
inData
不为类型
transferType
的基本数组
ArrayIndexOutOfBoundsException
- 如果
inData
不是特别大,不能存储此
ColorModel
的像素值
UnsupportedOperationException
- 如果此
tranferType
不受此
ColorModel
支持
public int getBlue(Object inData)
ColorSpace
(即 sRGB)中缩放范围是 0 到 255。如有必要,可进行颜色转换。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。返回的值是一个非预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则蓝色值将为 0。如果
inData
不为类型 transferType 的基本数组,则抛出
ClassCastException
。如果
inData
不是特别大,不能存储此
ColorModel
的像素值,则抛出
ArrayIndexOutOfBoundsException
。如果此
transferType
不受支持,则抛出
UnsupportedOperationException
。因为
ColorModel
为抽象类,所以任何实例必须是子类的实例。子类可以继承此方法的实现,并且如果子类未重写此方法,则在该子类使用除
DataBuffer.TYPE_BYTE
、
DataBuffer.TYPE_USHORT
或
DataBuffer.TYPE_INT
之外的
transferType
时,此方法将抛出异常。
inData
- 像素值的数组
ClassCastException
- 如果
inData
不为类型
transferType
的基本数组
ArrayIndexOutOfBoundsException
- 如果
inData
不是特别大,不能存储此
ColorModel
的像素值
UnsupportedOperationException
- 如果此
tranferType
不受此
ColorModel
支持
public int getAlpha(Object inData)
ClassCastException
。如果
inData
不是特别大,不能存储此
ColorModel
的像素值,则抛出
ArrayIndexOutOfBoundsException
。如果此
transferType
不受支持,则抛出
UnsupportedOperationException
。因为
ColorModel
为抽象类,所以任何实例必须是子类的实例。子类可以继承此方法的实现,并且如果子类未重写此方法,则在该子类使用除
DataBuffer.TYPE_BYTE
、
DataBuffer.TYPE_USHORT
或
DataBuffer.TYPE_INT
之外的
transferType
时,此方法将抛出异常。
inData
- 指定的像素
ClassCastException
- 如果
inData
不为类型
transferType
的基本数组
ArrayIndexOutOfBoundsException
- 如果
inData
不是特别大,不能存储此
ColorModel
的像素值
UnsupportedOperationException
- 如果此
tranferType
不受此
ColorModel
支持
public int getRGB(Object inData)