JavaTM Platform
Standard Ed. 6

java.awt.color
类 ICC_ColorSpace

java.lang.Object
  继承者 java.awt.color.ColorSpace
      继承者 java.awt.color.ICC_ColorSpace
所有已实现的接口:
Serializable

public class ICC_ColorSpace
extends ColorSpace

ICC_ColorSpace 类是抽象 ColorSpace 类的实现。这种与设备无关和设备相关的颜色空间表示形式基于国际色彩联盟规范 ICC.1:2001-12,颜色配置文件的文件格式(请参阅 http://www.color.org)。

通常,Color 或 ColorModel 与 ICC 配置文件相关联,该配置文件可以是输入、显示或输出配置文件(请参阅 ICC 规范)。还有其他类型的 ICC 配置文件,如抽象配置文件、设备链接配置文件和指定颜色配置文件,这些配置文件不包含适合表示颜色、图像或设备颜色空间的信息(请参阅 ICC_Profile)。试图从不适合的 ICC 配置文件创建 ICC_ColorSpace 对象会产生错误。

ICC 配置文件表示从配置文件(如监视器)的颜色空间到配置文件连接空间 (PCS) 的转换。用于标记图像或颜色的感兴趣配置文件有一个 PCS,它是 ICC 配置文件格式规范中定义的设备无关空间(一个 CIEXYZ 空间和两个 CIELab 空间)之一。大多数感兴趣的配置文件都具有可逆的转换或显式指定的双向转换。如果使用 ICC_ColorSpace 对象的方式需要从 PCS 到配置文件本机空间的变换,并且没有足够的数据来正确执行转换,则 ICC_ColorSpace 对象将在指定类型的颜色空间(如 TYPE_RGB、TYPE_CMYK 等等)中生成输出,但是输出数据的具体颜色值是不明确的。

此类的细节对于这样的简单 applet 是不重要的:在默认颜色空间中进行绘图,或者处理和显示具有已知颜色空间的导入图像。这种 applet 至多需要通过 ColorSpace.getInstance() 获取默认的颜色空间之一。

另请参见:
ColorSpace, ICC_Profile, 序列化表格

字段摘要
 
从类 java.awt.color.ColorSpace 继承的字段
CS_CIEXYZ, CS_GRAY, CS_LINEAR_RGB, CS_PYCC, CS_sRGB, TYPE_2CLR, TYPE_3CLR, TYPE_4CLR, TYPE_5CLR, TYPE_6CLR, TYPE_7CLR, TYPE_8CLR, TYPE_9CLR, TYPE_ACLR, TYPE_BCLR, TYPE_CCLR, TYPE_CMY, TYPE_CMYK, TYPE_DCLR, TYPE_ECLR, TYPE_FCLR, TYPE_GRAY, TYPE_HLS, TYPE_HSV, TYPE_Lab, TYPE_Luv, TYPE_RGB, TYPE_XYZ, TYPE_YCbCr, TYPE_Yxy
 
构造方法摘要
ICC_ColorSpace(ICC_Profile profile)
          由 ICC_Profile 对象构造一个新的 ICC_ColorSpace。
 
方法摘要
 float[] fromCIEXYZ(float[] colorvalue)
          将假定为 CS_CIEXYZ 变换颜色空间中的颜色值转换为此 ColorSpace 中的值。
 float[] fromRGB(float[] rgbvalue)
          将假定为默认 CS_sRGB 颜色空间中的颜色值转换成此 ColorSpace 中的值。
 float getMaxValue(int component)
          返回指定分量的最大标准化颜色分量值。
 float getMinValue(int component)
          返回指定分量的最小标准化颜色分量值。
 ICC_Profile getProfile()
          返回此 ICC_ColorSpace 的 ICC_Profile。
 float[] toCIEXYZ(float[] colorvalue)
          将假定为此 ColorSpace 中的颜色值转换成 CS_CIEXYZ 变换颜色空间中的值。
 float[] toRGB(float[] colorvalue)
          将假定为此 ColorSpace 中的颜色值转换成默认 CS_sRGB 颜色空间中的值。
 
从类 java.awt.color.ColorSpace 继承的方法
getInstance, getName, getNumComponents, getType, isCS_sRGB
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

ICC_ColorSpace

public ICC_ColorSpace(ICC_Profile profile)
由 ICC_Profile 对象构造一个新的 ICC_ColorSpace。

参数:
profile - 指定的 ICC_Profile 对象
抛出:
IllegalArgumentException - 如果 profile 不适合表示 ColorSpace。
方法详细信息

getProfile

public ICC_Profile getProfile()
返回此 ICC_ColorSpace 的 ICC_Profile。

返回:
此 ICC_ColorSpace 的 ICC_Profile。

toRGB

public float[] toRGB(float[] colorvalue)
将假定为此 ColorSpace 中的颜色值转换成默认 CS_sRGB 颜色空间中的值。

此方法使用可在输入和输出颜色之间生成最佳感知匹配的算法来转换颜色值。为了完成颜色值的色度变换,应该首先使用此颜色空间的 toCIEXYZ 方法将颜色值从输入颜色空间变换到 CS_CIEXYZ 颜色空间,然后使用 CS_sRGB 颜色空间的 fromCIEXYZ 方法将其从 CS_CIEXYZ 变换到输出颜色空间。有关此内容的更多信息,请参阅 toCIEXYZfromCIEXYZ

指定者:
ColorSpace 中的 toRGB
参数:
colorvalue - 一个长度至少等于此 ColorSpace 中的分量数的 float 数组。
返回:
一个长度为 3 的 float 数组。
抛出:
ArrayIndexOutOfBoundsException - 如果数组长度小于此 ColorSpace 中的分量数。

fromRGB

public float[] fromRGB(float[] rgbvalue)
将假定为默认 CS_sRGB 颜色空间中的颜色值转换成此 ColorSpace 中的值。

此方法使用可在输入和输出颜色之间生成最佳感知匹配的算法来变换颜色值。为了完成颜色值的色度变换,应该首先使用 CS_sRGB 颜色空间的 toCIEXYZ 方法将颜色值从输入颜色空间变换到 CS_CIEXYZ 颜色空间,然后使用此颜色空间的 fromCIEXYZ 方法将其从 CS_CIEXYZ 变换到输出颜色空间。有关此内容的更多信息,请参阅 toCIEXYZfromCIEXYZ

指定者:
ColorSpace 中的 fromRGB
参数:
rgbvalue - 长度至少为 3 的 float 数组。
返回:
一个长度等于 ColorSpace 中分量数的 float 数组。
抛出:
ArrayIndexOutOfBoundsException - 如果数组长度小于 3。

toCIEXYZ

public float[] toCIEXYZ(float[] colorvalue)
将假定为此 ColorSpace 中的颜色值转换成 CS_CIEXYZ 变换颜色空间中的值。

此方法使用相对色度来转换颜色值,由 ICC 规范所定义。这意味着此方法所返回的 XYZ 值是相对于 CS_CIEXYZ 颜色空间的 D50 白色点来表示的。这种表示方法在两步骤的颜色变换过程中是很有用的,即将输入颜色空间中的颜色转换为 CS_CIEXYZ,然后再转换为输出颜色空间中的颜色。该表示形式和通过色度计提供的颜色值所测量的 XYZ 值不同。计算使用当前 CIE 推荐的做法所测量的 XYZ 值还需要进一步的转换。下面各段对此进行了详细解释。

ICC 标准使用设备无关的颜色空间 (DICS) 作为将颜色从一台设备变换到另一台设备的机制。在此架构中,将颜色从源设备的颜色空间变换到 ICC DICS,然后从 ICC DICS 变换到目标设备的颜色空间。ICC 标准定义了在设备的颜色空间和 ICC DICS 之间进行转换的设备配置文件。从源设备的颜色到目标设备的颜色的总体转换是通过这种方式完成的:把源设备的设备到 DICS 的配置文件转换连接到目标设备的 DICS 到设备的配置文件转换。因此,ICC DICS 通常也称为配置文件连接空间 (PCS)。在 toCIEXYZ 和 fromCIEXYZ 方法中使用的颜色空间是由 ICC 规范所定义的 CIEXYZ PCS。这也是 ColorSpace.CS_CIEXYZ 所表示的颜色空间。

颜色的 XYZ 值通常相对于某些白色点来表示,所以在 XYZ 值白色点未知的情况下,是无法知道这些值的实际含义的。这称为相对色度。PCS 使用 D50 的白色点,所以 PCS 的 XYZ 值是相对于 D50 的。例如,PCS 中白色具有 D50 的 XYZ 值,定义为 X=.9642、Y=1.000 和 Z=0.8249。此白色点通常用于制版印刷应用中,但其他应用中也经常使用其他白色点。

要量化打印机或监视器等设备的颜色特征,通常是测量特定设备的颜色 XYZ 值。为便于论述,设备 XYZ 值这一术语用来表示使用当前的 CIE 推荐做法测量设备颜色所得的 XYZ 值。

在设备 XYZ 值和此方法返回的 PCS XYZ 值之间的转换对应于设备颜色空间(由 CIE 色度值表示)和 PCS 之间的转换。此过程涉及了很多因素,其中有些因素相当微妙。但最重要的要算为解决设备白色点和 PCS 白色点之间的不同而进行的调整。有许多针对这种调整的技术,它是当前许多研究和争论的主题。一些常用的方法是 XYZ 缩放、von Kries 转换和 Bradford 转换。应根据每个特定的应用来使用正确的方法。

最简单的方法是 XYZ 缩放。在此方法中,可将每台设备的 XYZ 值变换成 PCS XYZ 值,方法是将每台设备的 XYZ 值乘以 PCS 白色点 (D50) 和设备白色点的比值。

 
Xd、Yd、Zd 是设备的 XYZ 值
Xdw、Ydw、Zdw 是设备的 XYZ 白色点值
Xp、Yp、Zp 是 PCS XYZ 值
Xd50、Yd50、Zd50 是 PCS XYZ 白色点值
 
 Xp = Xd * (Xd50 / Xdw)
 Yp = Yd * (Yd50 / Ydw)
 Zp = Zd * (Zd50 / Zdw)
 
 

对这些等式取倒数可得到 PCS 到设备的变换:

 
 Xd = Xp * (Xdw / Xd50)
 Yd = Yp * (Ydw / Yd50)
 Zd = Zp * (Zdw / Zd50)
 
 

注意,ICC 配置文件中的介质白色点标记与设备的白色点标记不同。介质白色点标记以 PCS 值的形式表示,并且用于表示设备光源的 XYZ 和在该光源下所测量的设备介质 XYZ 之间的差异。设备白色点以对应于设备上所显示的白色的设备 XYZ 值来表示。例如,在 sRGB 设备上显示 RGB 颜色(1.0、1.0、1.0)将得到被测设备的 D65 XYZ 值。这与 sRGB 设备的 ICC 配置文件中的介质白色点标记 XYZ 值不同。

指定者:
ColorSpace 中的 toCIEXYZ
参数:
colorvalue - 一个长度至少等于此 ColorSpace 中的分量数的 float 数组。
返回:
一个长度为 3 的 float 数组。
抛出:
ArrayIndexOutOfBoundsException - 如果数组长度小于此 ColorSpace 中的分量数。

fromCIEXYZ

public float[] fromCIEXYZ(float[] colorvalue)
将假定为 CS_CIEXYZ 变换颜色空间中的颜色值转换为此 ColorSpace 中的值。

此方法使用相对色度来转换颜色值,由 ICC 规范所定义。这意味着此方法所返回的 XYZ 参数值是相对于 CS_CIEXYZ 颜色空间的 D50 白色点来表示的。这种表示方法在两步骤的颜色变换过程中是很有用的,即将输入颜色空间中的颜色转换为 CS_CIEXYZ,然后再转换为输出颜色空间中的颜色。此方法返回的颜色值与色度计测量时生成并传递给方法的 XYZ 值不同。如果 XYZ 值对应于使用当前 CIE 推荐的做法所测量的值,则在将其传递给此方法前必须转换成 D50 相对值。下面各段对此进行了详细解释。

ICC 标准使用设备无关的颜色空间 (DICS) 作为将颜色从一台设备变换到另一台设备的机制。在此架构中,将颜色从源设备的颜色空间变换到 ICC DICS,然后从 ICC DICS 变换到目标设备的颜色空间。ICC 标准定义了在设备的颜色空间和 ICC DICS 之间进行转换的设备配置文件。从源设备的颜色到目标设备的颜色的总体转换是通过这种方式完成的:把源设备的设备到 DICS 的配置文件转换连接到目标设备的 DICS 到设备的配置文件转换。因此,ICC DICS 通常也称为配置文件连接空间 (PCS)。在 toCIEXYZ 和 fromCIEXYZ 方法中使用的颜色空间是由 ICC 规范所定义的 CIEXYZ PCS。这也是 ColorSpace.CS_CIEXYZ 所表示的颜色空间。

颜色的 XYZ 值通常相对于某些白色点来表示,所以在 XYZ 值白色点未知的情况下,是无法知道这些值的实际含义的。这称为相对色度。PCS 使用 D50 的白色点,所以 PCS 的 XYZ 值是相对于 D50 的。例如,PCS 中白色具有 D50 的 XYZ 值,定义为 X=.9642、Y=1.000 和 Z=0.8249。此白色点通常用于制版印刷应用中,但其他应用中也经常使用其他白色点。

要量化打印机或监视器等设备的颜色特征,通常是测量特定设备颜色的 XYZ 值。为便于论述,设备 XYZ 值这一术语用来表示使用当前的 CIE 推荐做法测量设备颜色所得的 XYZ 值。

在设备 XYZ 值和此方法作为参数采用的 PCS XYZ 值之间的变换对应于设备颜色空间(由 CIE 色度值表示)和 PCS 之间的变换。此过程涉及了很多因素,其中有些因素相当微妙。但最重要的要算为解决设备白色点和 PCS 白色点之间的不同而进行的调整。有许多针对这种调整的技术,它是当前许多研究和争论的主题。一些常用的方法是 XYZ 缩放、von Kries 转换和 Bradford 转换。应根据每个特定的应用来使用正确的方法。

最简单的方法是 XYZ 缩放。在此方法中,可将每台设备的 XYZ 值变换成 PCS XYZ 值,方法是将每台设备的 XYZ 值乘以 PCS 白色点 (D50) 和设备白色点的比值。

 
Xd、Yd、Zd 是设备的 XYZ 值
Xdw、Ydw、Zdw 是设备的 XYZ 白色点值
Xp、Yp、Zp 是 PCS XYZ 值
Xd50、Yd50、Zd50 是 PCS XYZ 白色点值
 
 Xp = Xd * (Xd50 / Xdw)
 Yp = Yd * (Yd50 / Ydw)
 Zp = Zd * (Zd50 / Zdw)
 
 

对这些等式取倒数可得到 PCS 到设备的变换:

 
 Xd = Xp * (Xdw / Xd50)
 Yd = Yp * (Ydw / Yd50)
 Zd = Zp * (Zdw / Zd50)
 
 

注意,ICC 配置文件中的介质白色点标记与设备的白色点标记不同。介质白色点标记以 PCS 值的形式表示,并且用于表示设备光源的 XYZ 和在该光源下所测量的设备介质 XYZ 之间的差异。设备白色点以对应于设备上所显示的白色的设备 XYZ 值来表示。例如,在 sRGB 设备上显示 RGB 颜色(1.0、1.0、1.0)将得到被测设备的 D65 XYZ 值。这与 sRGB 设备的 ICC 配置文件中的介质白色点标记 XYZ 值不同。

指定者:
ColorSpace 中的 fromCIEXYZ
参数:
colorvalue - 长度至少为 3 的 float 数组。
返回:
一个长度等于 ColorSpace 中分量数的 float 数组。
抛出:
ArrayIndexOutOfBoundsException - 如果数组长度小于 3。

getMinValue

public float getMinValue(int component)
返回指定分量的最小标准化颜色分量值。对于 TYPE_XYZ 空间,此方法为所有分量返回最小值 0.0。对于 TYPE_Lab 空间,此方法为 L 分量返回 0.0,为 a 和 b 分量返回 -128.0。这与 ICC 规范中的 XYZ 和 Lab 配置文件连接空间的编码一致。对于所有其他类型,此方法为所有分量返回 0.0。使用具有要求不同最小分量值配置文件的 ICC_ColorSpace 时,需要为此类创建子类并重写此方法。

覆盖:
ColorSpace 中的 getMinValue
参数:
component - 分量索引。
返回:
最小标准化分量值。
抛出:
IllegalArgumentException - 如果 component 小于 0 或大于 numComponents - 1。
从以下版本开始:
1.4

getMaxValue

public float getMaxValue(int component)
返回指定分量的最大标准化颜色分量值。对于 TYPE_XYZ 空间,此方法为所有分量返回最大值 1.0 + (32767.0 / 32768.0)。对于 TYPE_Lab 空间,此方法为 L 分量返回 100.0,为 a 和 b 分量返回 127.0。这与 ICC 规范中的 XYZ 和 Lab 配置文件连接空间的编码一致。对于所有其他类型,此方法为所有分量返回 1.0。使用具有要求不同最大分量值的配置文件的 ICC_ColorSpace 时,需要为此类创建子类并重写此方法。

覆盖:
ColorSpace 中的 getMaxValue
参数:
component - 分量索引。
返回:
最大标准化分量值。
抛出:
IllegalArgumentException - 如果 component 小于 0 或大于 numComponents - 1。
从以下版本开始:
1.4

JavaTM Platform
Standard Ed. 6

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

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