所有类


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  intpixel_bits
          像素总位数。
protected  inttransferType
          用于表示像素值的数组的数据类型。
 
从接口 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
 
方法摘要
 ColorModelcoerceData(WritableRaster raster, boolean isAlphaPremultiplied)
          强制使光栅数据与在 isAlphaPremultiplied 变量中指定的状态匹配,假定当前该数据已由此 ColorModel 正确描述。
 SampleModelcreateCompatibleSampleModel(int w, int h)
          用指定宽度和高度创建的 SampleModel,具有与此 ColorModel 兼容的数据布局。
 WritableRastercreateCompatibleWritableRaster(int w, int h)
          用指定宽度和高度创建的 WritableRaster,具有与此 ColorModel 兼容的数据布局 (SampleModel)。
 booleanequals(Object obj)
          测试指定的 Object 是否是 ColorModel 的实例,以及它是否等于此 ColorModel
 voidfinalize()
          一旦不再引用此 ColorModel,就要释放与此 ColorModel 相关的系统资源。
abstract  intgetAlpha(int pixel)
          返回指定像素(缩放范围从 0 到 255)的 alpha 分量。
 intgetAlpha(Object inData)
          返回指定像素(在 0 到 255 之间缩放)的 alpha 分量。
 WritableRastergetAlphaRaster(WritableRaster raster)
          返回表示图像(从输入 Raster 中提取)的 alpha 通道的 Raster,除非此 ColorModel 的像素值将颜色和 alpha 信息表示为独立的空间 band(如 ComponentColorModelDirectColorModel)。
abstract  intgetBlue(int pixel)
          返回指定像素(在默认的 RGB ColorSpace(即 sRGB)中缩放范围从 0 到 255)的蓝色分量的值。
 intgetBlue(Object inData)
          返回指定像素(在默认的 RGB ColorSpace sRGB 中缩放范围从 0 到 255)的蓝颜色分量。
 ColorSpacegetColorSpace()
          返回与此 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 分量的位数数组。
 intgetComponentSize(int componentIdx)
          返回指定颜色/alpha 分量的位数。
 intgetDataElement(float[] normComponents, int normOffset)
          在已给定标准化颜色/alpha 分量的数组的情况下,返回以 int 类型表示在此 ColorModel 中的像素值。
 intgetDataElement(int[] components, int offset)
          在已给定非标准化颜色/alpha 分量的数组的情况下,返回此 ColorModel 中以 int 类型表示的像素值。
 ObjectgetDataElements(float[] normComponents, int normOffset, Object obj)
          在已给定标准化颜色/alpha 分量的数组的情况下,返回此 ColorModel 中像素的数据元素数组表示形式。
 ObjectgetDataElements(int[] components, int offset, Object obj)
          在已给定非标准化颜色/alpha 分量的情况下,返回此 ColorModel 中像素的数据元素数组表示形式。
 ObjectgetDataElements(int rgb, Object pixel)
          在默认 RGB 颜色模型中给定整数像素的表示形式的情况下,返回此 ColorModel 中像素的数据元素数组的表示形式。
abstract  intgetGreen(int pixel)
          返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的绿色颜色分量。
 intgetGreen(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 分量的数组。
 intgetNumColorComponents()
          返回此 ColorModel 中颜色分量数。
 intgetNumComponents()
          返回此 ColorModel 中分量数(包括 alpha 分量数)。
 intgetPixelSize()
          返回由此 ColorModel 描述的每像素的位数。
abstract  intgetRed(int pixel)
          返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的红色颜色分量。
 intgetRed(Object inData)
          返回指定像素(在默认的 RGB ColorSpace,即 sRGB,中缩放范围从 0 到 255)的红色颜色分量。
 intgetRGB(int pixel)
          返回默认的 RGB 颜色模型格式中像素的颜色/alpha 分量。
 intgetRGB(Object inData)
          返回默认的 RGB 颜色模型格式中的像素的颜色/alpha 分量。
static ColorModelgetRGBdefault()
          返回描述整数 RGB 值的默认格式的 DirectColorModel,该整数 RGB 值可以在便于程序员使用的 AWT 图像接口中的许多方法中使用。
 intgetTransferType()
          返回此 ColorModel 的转换类型。
 intgetTransparency()
          返回透明度。
 int[]getUnnormalizedComponents(float[] normComponents, int normOffset, int[] components, int offset)
          在已给定标准化分量数组的情况下,返回以非标准化形式存在的所有颜色/alpha 分量的数组。
 booleanhasAlpha()
          返回此 ColorModel 中是否支持 alpha。
 inthashCode()
          返回此 ColorModel 的哈希码。
 booleanisAlphaPremultiplied()
          返回是否在由此 ColorModel 转换的像素值中预乘 alpha。
 booleanisCompatibleRaster(Raster raster)
          如果 raster 与此 ColorModel 兼容,则返回 true,如果不兼容,则返回 false
 booleanisCompatibleSampleModel(SampleModel sm)
          检查 SampleModel 是否与此 ColorModel 兼容。
 StringtoString()
          返回此 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 信息。booleanisAlphaPremultiplied 指定如何解释像素值,其中颜色和 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 描述的每像素的位数。

返回:
每像素的位数。