JavaTM 2 Platform
Standard Ed. 5.0

java.awt.image
类 ColorModel

java.lang.Object
  继承者 java.awt.image.ColorModel
所有已实现的接口:
Transparency
直接已知子类:
ComponentColorModel, IndexColorModel, PackedColorModel

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 引入了表示图像的其他类。对于 BufferedImageRenderedImage 对象(基于 RasterSampleModel 类),像素值用单个 int 表示可能不太方便。因此,ColorModel 现在提供了以基本类型数组表示像素值的方法。特定 ColorModel 对象使用的基本类型被称作其转换类型。

当调用采用单个 int 像素参数的方法时,与其像素值不便于表示为单个 int 的图像一起使用的 ColorModel 对象会抛出 IllegalArgumentExceptionColorModel 的子类必须指定出现这种情况的条件。对于 DirectColorModelIndexColorModel 对象,不会出现这种情况。

当前,受 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 的转换类型匹配。表示 RasterSampleModel(从这些类的 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 类的 getMinValuegetMaxValue 方法得到。标准化的颜色分量值未预乘。所有 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 对象将抛出 IllegalArgumentExceptionColorModel 的子类必须指定出现这种情况的条件。

另请参见:
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(如 ComponentColorModelDirectColorModel)。
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 分量。颜色空间默认为 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

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。如果 booleantrue,则假定颜色样本已经与 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 描述的每像素的位数。

返回:
每像素的位数。

getComponentSize

public int getComponentSize(int componentIdx)
返回指定颜色/alpha 分量的位数。按 ColorSpace 中指定的顺序索引颜色分量。通常,此顺序反映了颜色空间类型的名称。例如,对于 TYPE_RGB,索引 0 对应于红色,索引 1 对应于绿色,索引 2 对应于蓝色。如果此 ColorModel 支持 alpha,则该 alpha 分量对应于最后一个颜色分量后面的索引。

参数:
componentIdx - 颜色/alpha 分量的索引
返回:
指定索引处颜色/alpha 分量的位数。
抛出:
ArrayIndexOutOfBoundsException - 如果 componentIdx 大于分量数或小于 0
NullPointerException - 如果位数数组为 null

getComponentSize

public int[] getComponentSize()
返回每个颜色/alpha 分量的位数数组。该数组包含以 ColorSpace 指定的顺序排列的颜色分量,后面是 alpha 分量(如果存在)。

返回:
每个颜色/alpha 分量的位数的数组

getTransparency

public int getTransparency()
返回透明度。返回 OPAQUE、BITMASK 或 TRANSLUCENT。

指定者:
接口 Transparency 中的 getTransparency
返回:
ColorModel 的透明度。
另请参见:
Transparency.OPAQUE, Transparency.BITMASK, Transparency.TRANSLUCENT

getNumComponents

public int getNumComponents()
返回此 ColorModel 中分量数(包括 alpha 分量数)。此分量数等于颜色分量数,或者加 1(如果存在 alpha 分量)。

返回:
ColorModel 中分量数

getNumColorComponents

public int getNumColorComponents()
返回此 ColorModel 中颜色分量数。这是 ColorSpace.getNumComponents() 返回的分量数。

返回:
ColorModel 中颜色分量数。
另请参见:
ColorSpace.getNumComponents()

getRed

public abstract int getRed(int pixel)
返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的红色颜色分量。如有必要,可进行颜色转换。将该像素值指定为 int。如果此 ColorModel 的像素值不便于用单个 int 表示,则抛出 IllegalArgumentException。返回的值不是预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则红色值为 0。

参数:
pixel - 指定的像素
返回:
指定像素的红色分量的值。

getGreen

public abstract int getGreen(int pixel)
返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的绿色颜色分量。如有必要,可进行颜色转换。将该像素值指定为 int。如果此 ColorModel 的像素值不便于用单个 int 表示,则抛出 IllegalArgumentException。返回的值是一个非预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则绿色值为 0。

参数:
pixel - 指定的像素
返回:
指定像素的绿色分量的值。

getBlue

public abstract int getBlue(int pixel)
返回指定像素(在默认的 RGB ColorSpace(即 sRGB)中缩放范围从 0 到 255)的蓝色分量的值。如有必要,可进行颜色转换。将该像素值指定为 int。如果此 ColorModel 的像素值不便于用单个 int 表示,则抛出 IllegalArgumentException。返回的值为非预先乘得的值,例如,如果与 alpha 预先相乘,此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则蓝色值为 0。

参数:
pixel - 指定的像素
返回:
指定像素的蓝色分量的值。

getAlpha

public abstract int getAlpha(int pixel)
返回指定像素(缩放范围从 0 到 255)的 alpha 分量。像素值指定为 int。如果此 ColorModel 的像素值不便于用单个 int 表示,则抛出 IllegalArgumentException

参数:
pixel - 指定的像素
返回:
该指定像素的 alpha 分量的值。

getRGB

public int getRGB(int pixel)
返回默认的 RGB 颜色模型格式中像素的颜色/alpha 分量。如有必要,可进行颜色转换。将该像素值指定为 int。如果此 ColorModel 的像素值不便于用单个 int 表示,则抛出 IllegalArgumentException。返回的值是非预乘格式。例如,如果预乘 alpha,此方法会将 alpha 从颜色分量中除出来。如果 alpha 值为 0,则颜色值为 0。

参数:
pixel - 指定的像素
返回:
指定像素的颜色/alpha 分量的 RGB 值。
另请参见:
getRGBdefault()

getRed

public int getRed(Object inData)
返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的红色颜色分量。如有必要,可进行颜色转换。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。返回的值是一个非预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则红色值为 0。如果 inData 不为类型 transferType 的基本数组,则抛出 ClassCastException。如果 inData 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。如果此 transferType 不受支持,则抛出 UnsupportedOperationException。因为 ColorModel 为抽象类,所以任何实例必须是子类的实例。子类可以继承此方法的实现,并且如果子类未重写此方法,则在该子类使用除 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT 之外的 transferType 时,此方法将抛出异常。

参数:
inData - 像素值的数组
返回:
指定像素的红色分量的值。
抛出:
ClassCastException - 如果 inData 不为类型 transferType 的基本数组
ArrayIndexOutOfBoundsException - 如果 inData 不是特别大,不能存储此 ColorModel 的像素值
UnsupportedOperationException - 如果此 tranferType 不受此 ColorModel 支持

getGreen

public int getGreen(Object inData)
返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的绿色颜色分量。如有必要,可进行颜色转换。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。返回的值为非预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则绿色值为 0。如果 inData 不为类型 transferType 的基本数组,则抛出 ClassCastException。如果 inData 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。如果此 transferType 不受支持,则抛出 UnsupportedOperationException。因为 ColorModel 为抽象类,所以任何实例必须是子类的实例。子类可以继承此方法的实现,并且如果子类未重写此方法,则在该子类使用除 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT 之外的 transferType 时,此方法将抛出异常。

参数:
inData - 像素值的数组
返回:
指定像素的绿色分量的值。
抛出:
ClassCastException - 如果 inData 不为类型 transferType 的基本数组
ArrayIndexOutOfBoundsException - 如果 inData 不是特别大,不能存储此 ColorModel 的像素值
UnsupportedOperationException - 如果此 tranferType 不受此 ColorModel 支持

getBlue

public int getBlue(Object inData)
返回指定像素(在默认的 RGB ColorSpace sRGB 中缩放范围从 0 到 255)的蓝颜色分量。如有必要,可进行颜色转换。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。返回的值是一个非预先乘得的值。例如,如果预乘了 alpha,则此方法会在返回值之前除以 alpha。如果 alpha 值为 0,则蓝色值将为 0。如果 inData 不为类型 transferType 的基本数组,则抛出 ClassCastException。如果 inData 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。如果此 transferType 不受支持,则抛出 UnsupportedOperationException。因为 ColorModel 为抽象类,所以任何实例必须是子类的实例。子类可以继承此方法的实现,并且如果子类未重写此方法,则在该子类使用除 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT 之外的 transferType 时,此方法将抛出异常。

参数:
inData - 像素值的数组
返回:
指定像素的蓝色分量的值。
抛出:
ClassCastException - 如果 inData 不为类型 transferType 的基本数组
ArrayIndexOutOfBoundsException - 如果 inData 不是特别大,不能存储此 ColorModel 的像素值
UnsupportedOperationException - 如果此 tranferType 不受此 ColorModel 支持

getAlpha

public int getAlpha(Object inData)
返回指定像素(在 0 到 255 之间缩放)的 alpha 分量。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。如果 inData 不为类型 transferType 的基本数组,则抛出 ClassCastException。如果 inData 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。如果此 transferType 不受支持,则抛出 UnsupportedOperationException。因为 ColorModel 为抽象类,所以任何实例必须是子类的实例。子类可以继承此方法的实现,并且如果子类未重写此方法,则在该子类使用除 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT 之外的 transferType 时,此方法将抛出异常。

参数:
inData - 指定的像素
返回:
指定像素(从 0 到 255 缩放)的 alpha 分量。
抛出:
ClassCastException - 如果 inData 不为类型 transferType 的基本数组
ArrayIndexOutOfBoundsException - 如果 inData 不是特别大,不能存储此 ColorModel 的像素值
UnsupportedOperationException - 如果此 tranferType 不受此 ColorModel 支持

getRGB

public int getRGB(Object inData)
返回默认的 RGB 颜色模型格式中的像素的颜色/alpha 分量。如有必要,可进行颜色转换。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。如果 inData 不为类型 transferType 的基本数组,则抛出 ClassCastException。如果 inData 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。返回的值将是非预乘格式,例如,如果与 alpha 预先相乘,此方法会将其从颜色分量中除出来(如果 alpha 值为 0,则颜色值将为 0)。

参数:
inData - 指定像素
返回:
该指定像素的颜色和 alpha 分量。
另请参见:
getRGBdefault()

getDataElements

public Object getDataElements(int rgb,
                              Object pixel)
在默认 RGB 颜色模型中给定整数像素的表示形式的情况下,返回此 ColorModel 中像素的数据元素数组的表示形式。然后将此数组传递到 WritableRaster 对象的 WritableRaster.setDataElements(int, int, java.lang.Object) 方法。如果像素变量为 null,则分配一个新数组。如果 pixel 不为 null,则它必须是类型 transferType 的基本数组;否则将抛出 ClassCastException。如果 pixel 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。返回该像素数组。如果此 transferType 不受支持,则抛出 UnsupportedOperationException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
rgb - 默认 RGB 颜色模式中的整数像素表示形式
pixel - 指定像素
返回:
ColorModel 中指定像素的数组表示形式。
抛出:
ClassCastException - 如果 pixel 不为类型 transferType 的基本数组
ArrayIndexOutOfBoundsException - 如果 pixel 不是特别大,不能存储此 ColorModel 的像素值
UnsupportedOperationException - 如果此方法不受此 ColorModel 支持
另请参见:
WritableRaster.setDataElements(int, int, java.lang.Object), SampleModel.setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)

getComponents

public int[] getComponents(int pixel,
                           int[] components,
                           int offset)
返回在 ColorModel 中已给定像素的非标准化颜色/alpha 分量。将像素值指定为 int。如果此 ColorModel 的像素值不便于用单个 int 表示,或者此 ColorModel 的颜色分量值不便于以非标准化形式表示,则将抛出 IllegalArgumentException。例如,此方法可用于检索 DirectColorModel 中特定像素值的分量。如果分量数组为 null,则分配一个新数组。该分量数组将被返回。将颜色/alpha 分量存储在以 offset 开头的 component 数组中,即便此方法已分配了数组也如此。如果分量数组不为 null,且不是特别大,不能存储以偏移量开头的所有颜色和 alpha 分量,则抛出 ArrayIndexOutOfBoundsException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
pixel - 指定的像素
components - 收到指定像素的颜色和 alpha 分量的数组
offset - 开始存储颜色和 alpha 分量时的 components 数组的偏移量
返回:
包含以指定偏移量开头的指定像素的颜色和 alpha 分量的数组。
抛出:
UnsupportedOperationException - 如果此方法不受此 ColorModel 支持

getComponents

public int[] getComponents(Object pixel,
                           int[] components,
                           int offset)
返回在此 ColorModel 中已给定像素的非标准化颜色/alpha 分量的数组。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。如果 pixel 不为类型 transferType 的基本数组,则抛出 ClassCastException。如果此 ColorModel 的颜色分量值不方便以非标准化形式表示,则抛出 IllegalArgumentException。如果 pixel 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。此方法可用于获取任何 ColorModel 中的指定像素值的分量。如果分量数组为 null,则分配一个新数组。该分量数组将被返回。将颜色/alpha 分量存储在以 offset 开头的 components 数组中,即便此方法已分配了数组也如此。如果分量数组不为 null,且不是特别大,不能存储所有颜色和 alpha 分量(以 offset开头),则抛出 ArrayIndexOutOfBoundsException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
pixel - 指定像素
components - 收到该指定像素的颜色和 alpha 分量的数组
offset - 在其处开始存储指定像素的颜色和 alpha 分量的 components 数组的索引
返回:
包含以指定偏移量开头的指定像素的颜色和 alpha 分量的数组。
抛出:
UnsupportedOperationException - 如果此方法不受此 ColorModel 支持

getUnnormalizedComponents

public int[] getUnnormalizedComponents(float[] normComponents,
                                       int normOffset,
                                       int[] components,
                                       int offset)
在已给定标准化分量数组的情况下,返回以非标准化形式存在的所有颜色/alpha 分量的数组。非标准化分量为 0 和 2n - 1 之间的无符号整数值,其中 n 为特定分量的位数。标准化分量为 float 值,这些值介于此 ColorModelColorSpace 对象指定的每个分量的最小值和最大值之间。如果此 ColorModel 的颜色分量值不便于用非标准化形式表示,则抛出 IllegalArgumentException。如果 components 数组为 null,则分配一个新数组。该 components 数组将被返回。将颜色/alpha 分量存储在以 offset 开头的 components 数组中,即便此方法已分配了数组也如此。如果 components 数组不为 null,且不是特别大,不能存储所有颜色和 alpha 分量(以 offset 开头),则抛出 ArrayIndexOutOfBoundsException。如果 normComponents 数组不是特别大,不能存储以 normOffset 开头的所有颜色和 alpha 分量,则抛出 IllegalArgumentException

参数:
normComponents - 包含标准化分量的数组
normOffset - 开始检索标准化分量的 normComponents 数组的偏移量
components - 从 normComponents 检索分量的数组
offset - 在其处开始存储 normComponentscomponents 的索引
返回:
包含非标准化颜色和 alpha 分量的数组。
抛出:
IllegalArgumentException - 如果此 ColorModel 的分量值不便于用非标准化形式表示。
IllegalArgumentException - 如果 normComponents 的长度减去 normOffset 小于 numComponents
UnsupportedOperationException - 如果此 ColorModel 的构造方法调用了 super(bits) 构造方法,但未重写此方法。参见构造方法,ColorModel(int)

getNormalizedComponents

public float[] getNormalizedComponents(int[] components,
                                       int offset,
                                       float[] normComponents,
                                       int normOffset)
在给定标准化分量数组的情况下,返回以标准化形式存在的所有颜色/alpha 分量的数组。非标准化分量为 0 和 2n - 1 之间的无符号整数值,其中 n 为特定分量的位数。标准化分量为 float 值,这些值介于此 ColorModelColorSpace 对象指定的每个分量的最小值和最大值之间。如果此 ColorModel 的颜色分量值不便于用非标准化形式表示,则抛出 IllegalArgumentException。如果 normComponents 数组为 null,则分配一个新数组。该 normComponents 数组将被返回。颜色/alpha 分量存储在以 normOffset 开头的 normComponents 数组中,即使此方法已分配了数组也如此。如果 normComponents 数组不为 null,且不是特别大,不能存储所有颜色和 alpha 分量(以 normOffset 开头),则抛出 ArrayIndexOutOfBoundsException。如果 components 数组不是特别大,不能存储以 offset 开头的所有颜色和 alpha 分量,则抛出 IllegalArgumentException

因为 ColorModel 为抽象类,所以任何实例都是子类的实例。此抽象类中该方法的默认实现假定此类的分量值可以方便地以非标准化的形式表示。因此,可能有不支持非标准化形式的实例的子类必须重写此方法。

参数:
components - 包含非标准化分量的数组
offset - 开始检索非标准化分量的 components 数组的偏移量
normComponents - 收到标准化分量的数组
normOffset - 在其处开始存储标准化分量的 normComponents 的索引
返回:
包含标准化颜色和 alpha 分量的数组。
抛出:
IllegalArgumentException - 如果此 ColorModel 的分量值不便于用非标准化形式表示。
UnsupportedOperationException - 如果此 ColorModel 的构造方法调用了 super(bits) 构造方法,但未重写此方法。参见构造方法,ColorModel(int)
UnsupportedOperationException - 如果此方法不能确定每个分量的位数

getDataElement

public int getDataElement(int[] components,
                          int offset)
在已给定非标准化颜色/alpha 分量的数组的情况下,返回此 ColorModel 中以 int 类型表示的像素值。如果此 ColorModel 中的分量值不便于用单个 int 表示,或者此 ColorModel 的颜色分量值不便于用非标准化形式表示,则此方法将抛出 IllegalArgumentException。如果 components 数组不是特别大,不能存储所有以 offset 开始的颜色和 alpha 分量,则抛出 ArrayIndexOutOfBoundsException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
components - 非标准化的颜色和 alpha 分量的数组
offset - 开始检索颜色和 alpha 分量处的 components 的索引
返回:
ColorModel 中与指定分量相对应的 int 像素值。
抛出:
IllegalArgumentException - 如果此 ColorModel 的像素值不便于用单个 int 表示
IllegalArgumentException - 如果此 ColorModel 的分量值不便于用非标准化形式表示
ArrayIndexOutOfBoundsException - 如果 components 数组不是特别大,不能存储以 offset 开头的所有颜色和 alpha 分量
UnsupportedOperationException - 如果此方法不受此 ColorModel 支持

getDataElements

public Object getDataElements(int[] components,
                              int offset,
                              Object obj)
在已给定非标准化颜色/alpha 分量的情况下,返回此 ColorModel 中像素的数据元素数组表示形式。然后可以将此数组传递给 WritableRaster 对象的 setDataElements 方法。如果此 ColorModel 的颜色分量值不便于用非标准化形式表示,则此方法将抛出 IllegalArgumentException。如果 components 数组不是特别大,不能存储所有以 offset 开始的颜色和 alpha 分量,则抛出 ArrayIndexOutOfBoundsException。如果 obj 变量为 null,则分配一个新数组。如果 obj 不为 null,则它必须为类型 transferType 的基本数组;否则将抛出 ClassCastException。如果 obj 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
components - 非标准化的颜色和 alpha 分量的数组
offset - 开始检索颜色和 alpha 分量处的 components 的索引
obj - 表示颜色和 alpha 分量的数组的 Object
返回:
表示颜色和 alpha 分量的数组的 Object
抛出:
ClassCastException - 如果 obj 不为类型 transferType 的基本数组
ArrayIndexOutOfBoundsException - 如果 obj 不是特别大,不能存储此 ColorModel 的像素值,或者 components 数组不是特别大,不能存储以 offset 开头的所有颜色和 alpha 分量
IllegalArgumentException - 如果此 ColorModel 的分量值不便于用非标准化形式表示
UnsupportedOperationException - 如果此方法不受此 ColorModel 支持
另请参见:
WritableRaster.setDataElements(int, int, java.lang.Object), SampleModel.setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)

getDataElement

public int getDataElement(float[] normComponents,
                          int normOffset)
在已给定标准化颜色/alpha 分量的数组的情况下,返回以 int 类型表示在此 ColorModel 中的像素值。如果此 ColorModel 的像素值不便于用单个 int,则此方法将抛出 IllegalArgumentException。如果 normComponents 数组不是特别大,不能存储所有以 normOffset 开头的颜色和 alpha 分量,则抛出 ArrayIndexOutOfBoundsException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。此抽象类中该方法的默认实现先从标准化形式转换到非标准化形式,然后再调用 getDataElement(int[], int)。可能有不支持非标准化形式的实例的子类必须重写此方法。

参数:
normComponents - 标准化颜色和 alpha 分量的数组
normOffset - 开始检索颜色和 alpha 分量的 normComponents 的索引
返回:
ColorModel 中对应于指定分量的 int 像素值。
抛出:
IllegalArgumentException - 如果此 ColorModel 的像素值不便于用单个 int 表示
ArrayIndexOutOfBoundsException - 如果 normComponents 数组不是特别大,不能存储以 normOffset 开头的所有颜色和 alpha 分量
从以下版本开始:
1.4

getDataElements

public Object getDataElements(float[] normComponents,
                              int normOffset,
                              Object obj)
在已给定标准化颜色/alpha 分量的数组的情况下,返回此 ColorModel 中像素的数据元素数组表示形式。然后可以将此数组传递给 WritableRaster 对象的 setDataElements 方法。如果 normComponents 数组不是特别大,不能存储所有以 normOffset 开头的颜色和 alpha 分量,则抛出 ArrayIndexOutOfBoundsException。如果 obj 变量为 null,则分配一个新数组。如果 obj 不为 null,则它必须为类型 transferType 的基本数组;否则将抛出 ClassCastException。如果 obj 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。此抽象类中该方法的默认实现先从标准化形式转换到非标准化形式,然后再调用 getDataElement(int[], int, Object)。可能有不支持非标准化形式的实例的子类必须重写此方法。

参数:
normComponents - 标准化颜色和 alpha 分量的数组
normOffset - 开始检索颜色和 alpha 分量的 normComponents 的索引
obj - 保存返回的像素的基本数据数组
返回:
为像素的基本数据数组表示形式的 Object
抛出:
ClassCastException - 如果 obj 不为类型 transferType 的基本数组
ArrayIndexOutOfBoundsException - 如果 obj 不是特别大,不能存储此 ColorModel 的像素值,或者 normComponents 数组不是特别大,不能存储以 normOffset 开头的所有颜色和 alpha 分量
从以下版本开始:
1.4
另请参见:
WritableRaster.setDataElements(int, int, java.lang.Object), SampleModel.setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)

getNormalizedComponents

public float[] getNormalizedComponents(Object pixel,
                                       float[] normComponents,
                                       int normOffset)
返回已在 ColorModel 中给定了像素的标准化形式颜色/alpha 分量的数组。像素值由作为对象引用传入的类型 transferType 的数据元素的数组指定。如果像素不为类型 transferType 的基本数组,则抛出 ClassCastException。如果 pixel 不是特别大,不能存储此 ColorModel 的像素值,则抛出 ArrayIndexOutOfBoundsException。标准化分量为 float 值,这些值介于此 ColorModelColorSpace 对象指定的每个分量的最小值和最大值之间。如果 normComponents 数组为 null,则分配一个新数组。该 normComponents 数组将被返回。颜色/alpha 分量存储在以 normOffset 开头的 normComponents 数组中,即使此方法已分配了数组也如此。如果 normComponents 数组不为 null,且不是特别大,不能存储所有颜色和 alpha 分量(以 normOffset 开头),则抛出 ArrayIndexOutOfBoundsException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。此抽象类中该方法的默认实现先使用 getComponents(Object, int[], int) 检索以非标准化形式存在的颜色和 alpha 分量,然后再调用 getNormalizedComponents(int[], int, float[], int)。可能有不支持非标准化形式的实例的子类必须重写此方法。

参数:
pixel - 指定像素
normComponents - 检索标准化分量的数组
normOffset - 在其处开始存储标准化分量的 normComponents 数组的偏移量
返回:
包含标准化颜色和 alpha 分量的数组。
抛出:
ClassCastException - 如果 pixel 不为类型 transferType 的基本数组
ArrayIndexOutOfBoundsException - 如果 normComponents 不是特别大,不能存储以 normOffset 开头的所有颜色和 alpha 分量
ArrayIndexOutOfBoundsException - 如果 pixel 不是特别大,不能存储此 ColorModel 的像素值。
UnsupportedOperationException - 如果此 ColorModel 的构造方法调用了 super(bits) 构造方法,但未重写此方法。参见构造方法,ColorModel(int)
UnsupportedOperationException - 如果此方法不能确定每个分量的位数
从以下版本开始:
1.4

equals

public boolean equals(Object obj)
测试指定的 Object 是否是 ColorModel 的实例,以及它是否等于此 ColorModel

覆盖:
Object 中的 equals
参数:
obj - 用来进行相等性测试的 Object
返回:
如果指定的 ObjectColorModel 的实例,且等于此 ColorModel,则返回 true;否则返回 false
另请参见:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
返回此 ColorModel 的哈希码。

覆盖:
Object 中的 hashCode
返回:
此 ColorModel 的哈希码。
另请参见:
Object.equals(java.lang.Object), Hashtable

getColorSpace

public final ColorSpace getColorSpace()
返回与此 ColorModel 相关的 ColorSpace

返回:
ColorModelColorSpace

coerceData

public ColorModel coerceData(WritableRaster raster,
                             boolean isAlphaPremultiplied)
强制使光栅数据与在 isAlphaPremultiplied 变量中指定的状态匹配,假定当前该数据已由此 ColorModel 正确描述。可以将颜色 raster 数据乘以或除以 alpha,如果该数据处于正确状态,则不执行任何操作。如果需要对该数据强制匹配,则此方法还将相应地返回一个带有 isAlphaPremultiplied 标志集的 ColorModel 的实例。如果此方法不受 ColorModel 支持,则它将抛出 UnsupportedOperationException。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
raster - WritableRaster 数据
isAlphaPremultiplied - 如果与 alpha 预乘,则返回 true;否则将返回 false
返回:
表示被强制匹配数据的 ColorModel 对象。

isCompatibleRaster

public boolean isCompatibleRaster(Raster raster)
如果 raster 与此 ColorModel 兼容,则返回 true,如果不兼容,则返回 false。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
raster - 进行兼容性测试的 Raster 对象
返回:
true 如果 raster 与此 ColorModel 兼容。
抛出:
UnsupportedOperationException - 如果此方法不是为此 ColorModel 实现的。

createCompatibleWritableRaster

public WritableRaster createCompatibleWritableRaster(int w,
                                                     int h)
用指定宽度和高度创建的 WritableRaster,具有与此 ColorModel 兼容的数据布局 (SampleModel)。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
w - 应用到新 WritableRaster 的宽度
h - 应用到新 WritableRaster 的高度
返回:
具有指定宽度和高度的 WritableRaster 对象。
抛出:
UnsupportedOperationException - 如果此方法不受此 ColorModel 支持
另请参见:
WritableRaster, SampleModel

createCompatibleSampleModel

public SampleModel createCompatibleSampleModel(int w,
                                               int h)
用指定宽度和高度创建的 SampleModel,具有与此 ColorModel 兼容的数据布局。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
w - 应用于新的 SampleModel 的宽度
h - 应用于新的 SampleModel 的高度
返回:
具有指定宽度和高度的 SampleModel 对象。
抛出:
UnsupportedOperationException - 如果此方法不受此 ColorModel 支持
另请参见:
SampleModel

isCompatibleSampleModel

public boolean isCompatibleSampleModel(SampleModel sm)
检查 SampleModel 是否与此 ColorModel 兼容。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现抛出了 UnsupportedOperationException

参数:
sm - 指定的 SampleModel
返回:
如果指定的 SampleModel 与此 ColorModel 兼容,则返回 true;否则返回 false
抛出:
UnsupportedOperationException - 如果此方法不受此 ColorModel 支持
另请参见:
SampleModel

finalize

public void finalize()
一旦不再引用此 ColorModel,就要释放与此 ColorModel 相关的系统资源。

覆盖:
Object 中的 finalize

getAlphaRaster

public WritableRaster getAlphaRaster(WritableRaster raster)
返回表示图像(从输入 Raster 中提取)的 alpha 通道的 Raster,除非此 ColorModel 的像素值将颜色和 alpha 信息表示为独立的空间 band(如 ComponentColorModelDirectColorModel)。此方法假定与此类 ColorModel 相关的 Raster 对象将 alpha 的 band(如果存在)存储为图像数据的最后一个 band。如果不存在与此 ColorModel 相关的独立空间 alpha 通道,则返回 null。如果在查询表中有一个具有 alpha 的 IndexColorModel,则此方法将返回 null,因为没有空间上截然不同的 alpha 通道。此方法将创建新的 Raster(但将共享数据数组)。因为 ColorModel 为抽象类,所以任何实例都是子类的实例。子类必须重写此方法,以获取除返回 null 之外的任何行为,因为此抽象类中的实现返回 null

参数:
raster - 指定的 Raster
返回:
表示图像(从指定的 Raster 中得到)的 alpha 通道的 Raster

toString

public String toString()
返回此 ColorModel 对象的内容的 String 表示形式。

覆盖:
Object 中的 toString
返回:
表示此 ColorModel 对象的内容的 String

JavaTM 2 Platform
Standard Ed. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策