|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.awt.image
类 ColorModel
java.lang.Object java.awt.image.ColorModel
- 所有已实现的接口:
- Transparency
-
public abstract class ColorModel
- extends Object
- implements Transparency
此 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 |
字段详细信息 |
---|
pixel_bits
protected int pixel_bits
-
像素总位数。
transferType
protected int transferType
-
用于表示像素值的数组的数据类型。
构造方法详细信息 |
---|
ColorModel
public ColorModel(int bits)
-
构造
ColorModel
,将指定位数的像素转换为颜色/alpha 分量。颜色空间默认为 RGBColorSpace
(即 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
ColorModel
protected ColorModel(int pixel_bits, int[] bits, ColorSpace cspace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType)
-
构造将像素值转换为颜色/alpha 分量的
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
方法详细信息 |
---|
getRGBdefault
public static ColorModel getRGBdefault()
-
返回描述整数 RGB 值的默认格式的
DirectColorModel
,该整数 RGB 值可以在便于程序员使用的 AWT 图像接口中的许多方法中使用。颜色空间为默认的ColorSpace
(即 sRGB)。RGB 值的格式是一个 8 位的整数,从最高有效字节到最低有效字节的相应顺序排列 alpha、红色、绿色和蓝色颜色分量,格式如下:0xAARRGGBB。颜色分量未与 alpha 分量预乘。此格式不一定表示特定设备或所有图像的本机或最有效的ColorModel
。它只是一种通用的颜色模型格式。 -
-
- 返回:
-
描述默认 RGB 值的
DirectColorModel
对象。
hasAlpha
public final boolean hasAlpha()
-
返回此
ColorModel
中是否支持 alpha。 -
-
- 返回:
-
如果此
ColorModel
中支持 alpha,则返回true
;否则返回false
。
isAlphaPremultiplied
public final boolean isAlphaPremultiplied()
-
返回是否在由此
ColorModel
转换的像素值中预乘 alpha。如果布尔变量为true
,则使用此ColorModel
解释其中颜色和 alpha 信息表示为独立空间 band 的像素值,并且假定颜色样本已经与 alpha 样本相乘。 -
-
- 返回:
-
如果已在由此
ColorModel
转换的像素值中预乘 alpha 值,则返回true
;否则返回false
。
getTransferType
public final int getTransferType()
-
返回此
ColorModel
的转换类型。该转换类型是一个基本数组类型,可用来以数组形式表示像素值。 -
-
- 返回:
- 转换类型。
getPixelSize
public int getPixelSize()
-
返回由此
ColorModel
描述的每像素的位数。 -
-
- 返回:
- 每像素的位数。