- 所有已实现的接口:
-
Serializable
ICC_ColorSpace
类是抽象ColorSpace
类的实现。这种设备无关和设备相关颜色空间的表示基于国际色彩协会规范ICC.1:2001-12,颜色配置文件格式(请参阅http://www.color.org)。
通常,Color
或ColorModel
会与一个ICC配置文件关联,该配置文件是输入、显示或输出配置文件(请参阅ICC规范)。还有其他类型的ICC配置文件,例如抽象配置文件、设备链接配置文件和命名颜色配置文件,这些配置文件不包含适合表示颜色、图像或设备的颜色空间的信息(请参阅ICC_Profile
)。尝试从不适当的ICC配置文件创建ICC_ColorSpace
对象是一个错误。
ICC配置文件表示从配置文件的颜色空间(例如显示器)到配置文件连接空间(PCS)的转换。用于标记图像或颜色的配置文件的PCS是国际色彩协会配置文件格式规范中定义的两个设备无关空间之一(一个CIEXYZ空间和两个CIELab空间)。大多数感兴趣的配置文件要么具有可逆转换,要么明确指定双向转换。如果ICC_ColorSpace
对象被用于需要从PCS转换为配置文件的本机空间并且没有足够的数据来正确执行转换的方式,ICC_ColorSpace
对象将以指定类型的颜色空间(例如TYPE_RGB
、TYPE_CMYK
等)生成输出,但输出数据的具体颜色值将是未定义的。
对于简单的应用程序来说,这个类的细节并不重要,这些应用程序会在默认颜色空间中绘制或处理和显示具有已知颜色空间的导入图像。在大多数情况下,这些应用程序只需要通过ColorSpace.getInstance(int)
获取一个默认颜色空间。
- 参见:
-
Field Summary
Fields declared in class 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
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionfloat[]
fromCIEXYZ
(float[] colorvalue) 将假定在CS_CIEXYZ
转换颜色空间中的颜色值转换为此颜色空间。float[]
fromRGB
(float[] rgbvalue) 将假定在默认CS_sRGB
颜色空间中的颜色值转换为此ColorSpace
。float
getMaxValue
(int component) 返回指定组件的最大归一化颜色分量值。float
getMinValue
(int component) 返回指定组件的最小归一化颜色分量值。返回此ICC_ColorSpace
的ICC_Profile
。float[]
toCIEXYZ
(float[] colorvalue) 将假定在此ColorSpace
中的颜色值转换为CS_CIEXYZ
转换颜色空间。float[]
toRGB
(float[] colorvalue) 将假定在此ColorSpace
中的颜色值转换为默认CS_sRGB
颜色空间中的值。Methods declared in class java.awt.color.ColorSpace
getInstance, getName, getNumComponents, getType, isCS_sRGB
-
Constructor Details
-
ICC_ColorSpace
从一个ICC_Profile
对象构造一个新的ICC_ColorSpace
。- 参数:
-
profile
- 指定的ICC_Profile
对象 - 抛出:
-
IllegalArgumentException
- 如果配置文件不适合表示ColorSpace
-
-
Method Details
-
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
转换到输出颜色空间。有关更多信息,请参阅toCIEXYZ
和fromCIEXYZ
。- 指定者:
-
toRGB
在类ColorSpace
- 参数:
-
colorvalue
- 至少与此ColorSpace
中组件数量相同的长度的浮点数组 - 返回:
- 长度为3的浮点数组
- 抛出:
-
ArrayIndexOutOfBoundsException
- 如果数组长度不至少为此ColorSpace
中组件数量
-
fromRGB
public float[] fromRGB(float[] rgbvalue) 将假定在默认CS_sRGB
颜色空间中的颜色值转换为此ColorSpace
。此方法使用设计用于产生输入和输出颜色之间最佳感知匹配的算法来转换颜色值。为了对颜色值进行色度转换,您应该首先使用
CS_sRGB
颜色空间的toCIEXYZ
方法从输入颜色空间转换到CS_CIEXYZ
颜色空间,然后使用此颜色空间的fromCIEXYZ
方法从CS_CIEXYZ
转换到输出颜色空间。有关更多信息,请参阅toCIEXYZ
和fromCIEXYZ
。- 指定者:
-
fromRGB
在类ColorSpace
- 参数:
-
rgbvalue
- 至少为3的长度的浮点数组 - 返回:
-
长度等于此
ColorSpace
中组件数量的浮点数组 - 抛出:
-
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值。
将此方法返回的PCS XYZ值与设备XYZ值之间的转换对应于将设备的颜色空间(表示为CIE色度值)与PCS之间的转换。这个过程涉及许多因素,其中一些是非常微妙的。然而,最重要的是为了考虑设备白点与PCS白点之间的差异而进行的调整。有许多技术可用于执行此操作,并且这是当前研究和争议的主题。一些常用的方法包括XYZ缩放、von Kries变换和Bradford变换。要使用的正确方法取决于每个特定的应用。
最简单的方法是XYZ缩放。在这种方法中,通过将每个设备XYZ值乘以PCS白点(D50)与设备白点的比率来将设备XYZ值转换为PCS XYZ值。
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值。例如,在sRGB设备上显示RGB颜色(1.0, 1.0, 1.0)将导致测得的设备XYZ值为D65。这与sRGB设备的ICC配置文件中的媒体白点标记XYZ值不同。
- 指定者:
-
toCIEXYZ
在类中ColorSpace
- 参数:
-
colorvalue
- 至少具有此ColorSpace
中组件数量的长度的浮点数组 - 返回:
- 长度为3的浮点数组
- 抛出:
-
ArrayIndexOutOfBoundsException
- 如果数组长度至少不是此ColorSpace
中组件数量
-
fromCIEXYZ
public float[] fromCIEXYZ(float[] colorvalue) 将假定为在CS_CIEXYZ
转换颜色空间中的颜色值转换为此ColorSpace。此方法使用相对色度将颜色值转换,如ICC规范所定义。这意味着此方法接收的XYZ参数值是相对于
CS_CIEXYZ
颜色空间的D50白点表示的。这种表示在两步颜色转换过程中很有用,其中颜色从输入颜色空间转换为CS_CIEXYZ
,然后再转换为输出颜色空间。此方法返回的颜色值不是通过色度计测得的传递给方法的XYZ值。如果您有对应于使用当前CIE推荐实践进行测量的XYZ值,则必须将其转换为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值。
将此方法接收的PCS XYZ值与设备XYZ值之间的转换对应于将设备的颜色空间(表示为CIE色度值)与PCS之间的转换。这个过程涉及许多因素,其中一些是非常微妙的。然而,最重要的是为了考虑设备白点与PCS白点之间的差异而进行的调整。有许多技术可用于执行此操作,并且这是当前研究和争议的主题。一些常用的方法包括XYZ缩放、von Kries变换和Bradford变换。要使用的正确方法取决于每个特定的应用。
最简单的方法是XYZ缩放。在这种方法中,通过将每个设备XYZ值乘以PCS白点(D50)与设备白点的比率来将设备XYZ值转换为PCS XYZ值。
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值。例如,在sRGB设备上显示RGB颜色(1.0, 1.0, 1.0)将导致测得的设备XYZ值为D65。这与sRGB设备的ICC配置文件中的媒体白点标记XYZ值不同。
- 指定者:
-
fromCIEXYZ
在类中ColorSpace
- 参数:
-
colorvalue
- 至少为3的长度的浮点数组 - 返回:
-
长度等于此
ColorSpace
中组件数量的浮点数组 - 抛出:
-
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
时,需要对此类进行子类化并覆盖此方法。- 覆盖:
-
getMinValue
在类ColorSpace
- 参数:
-
component
- 组件索引 - 返回:
- 最小归一化组件值
- 抛出:
-
IllegalArgumentException
- 如果组件小于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
时,需要对此类进行子类化并覆盖此方法。- 覆盖:
-
getMaxValue
在类ColorSpace
- 参数:
-
component
- 组件索引 - 返回:
- 最大归一化组件值
- 抛出:
-
IllegalArgumentException
- 如果组件小于0或大于numComponents - 1
- 自:
- 1.4
-