public class ICC_ColorSpace extends ColorSpace
通常,Color或ColorModel将与ICC配置文件相关联,ICC配置文件是输入,显示或输出配置文件(请参阅ICC规范)。 还有其他类型的ICC配置文件,例如抽象配置文件,设备链接配置文件和命名的颜色配置文件,不包含适用于表示颜色,图像或设备颜色空间的信息(请参阅ICC_Profile)。 尝试从不适当的ICC配置文件创建ICC_ColorSpace对象是一个错误。
ICC配置文件表示从配置文件(例如监视器)的颜色空间到配置文件连接空间(PCS)的转换。 用于标记图像或颜色感兴趣的配置文件具有PCS,它是ICC配置文件格式规范中定义的设备独立空间(一个CIEXYZ空间和两个CIELab空间)之一。 感兴趣的大多数资料都可以进行可逆转换,也可以明确地指出双向转换。 如果使用ICC_ColorSpace对象需要从PCS转换到配置文件的本机空间,并且没有足够的数据来正确执行转换,则ICC_ColorSpace对象将产生指定类型的颜色空间的输出(例如TYPE_RGB,TYPE_CMYK等) 。),但是输出数据的特定颜色值将是未定义的。
这个类的细节对于绘制默认颜色空间或者使用已知颜色空间操纵和显示导入图像的简单小程序不重要。 最多,这样的小程序需要通过ColorSpace.getInstance()获得默认的颜色空间。
ColorSpace
, ICC_Profile
, Serialized Form
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 and Description |
---|
ICC_ColorSpace(ICC_Profile profile)
从ICC_Profile对象构造一个新的ICC_ColorSpace。
|
Modifier and Type | Method and Description |
---|---|
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颜色空间中的值。
|
getInstance, getName, getNumComponents, getType, isCS_sRGB
public ICC_ColorSpace(ICC_Profile profile)
profile
- 指定的ICC_Profile对象
IllegalArgumentException
- 如果配置文件不适合代表ColorSpace。
public ICC_Profile getProfile()
public float[] toRGB(float[] colorvalue)
该方法使用旨在产生输入和输出颜色之间最佳感知匹配的算法来转换颜色值。 为了进行颜色值的toCIEXYZ
色转换,您应该使用此颜色空间的toCIEXYZ
方法首先将输入颜色空间转换为CS_CIEXYZ颜色空间,然后使用CS_sRGB颜色空间的fromCIEXYZ
方法将CS_CIEXYZ转换为输出颜色空间。 见toCIEXYZ
和fromCIEXYZ
进一步的信息。
toRGB
在类别
ColorSpace
colorvalue
- 一个长度至少为此ColorSpace中组件数量的浮点数组。
ArrayIndexOutOfBoundsException
- 如果数组长度至少不在此ColorSpace中的组件数量。
public float[] fromRGB(float[] rgbvalue)
该方法使用旨在产生输入和输出颜色之间最佳感知匹配的算法来转换颜色值。 为了进行颜色值的比色转换,您应该使用CS_sRGB颜色空间的toCIEXYZ
方法首先将输入颜色空间转换为CS_CIEXYZ颜色空间,然后使用该颜色空间的fromCIEXYZ
方法将其从CS_CIEXYZ转换为输出颜色空间。 见toCIEXYZ
和fromCIEXYZ
进一步的信息。
fromRGB
在类别
ColorSpace
rgbvalue
- 长度至少为3的浮点数组。
ArrayIndexOutOfBoundsException
- 如果数组长度不小于3。
public float[] toCIEXYZ(float[] colorvalue)
该方法使用ICC规范定义的相对比色法来转换颜色值。 这意味着通过该方法返回的XYZ值相对于CS_CIEXYZ颜色空间的D50白点来表示。 这种表示在两步颜色转换过程中是有用的,其中颜色从输入颜色空间转换为CS_CIEXYZ,然后转换为输出颜色空间。 该表示与通过色度计从给定颜色值测量的XYZ值不同。 需要进一步的转换来计算使用当前CIE推荐做法测量的XYZ值。 下面的段落更详细地解释了这一点。
ICC标准使用设备独立色彩空间(DICS)作为将颜色从一个设备转换到另一个设备的机制。 在此架构中,颜色从源设备的颜色空间转换为ICC DICS,然后从ICC DICS转换为目标设备的颜色空间。 ICC标准定义了包含将在设备的颜色空间和ICC DICS之间转换的转换的设备配置文件。 通过将源设备的配置文件的设备到DICS变换连接到目标设备的配置文件的DICS到设备的变换,可以实现从源设备到目标设备的颜色的整体转换。 因此,ICC DICS通常被称为配置文件连接空间(PCS)。 用于CIEXYZ和CIEXYZ的方法中使用的色彩空间是由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缩放。 在该方法中,通过将PCS XYZ值乘以PCS白点(D50)与设备白点的比例,将每个设备XYZ值转换为PCS XYZ值。
Xd, Yd, Zd are the device XYZ values
Xdw, Ydw, Zdw are the device XYZ white point values
Xp, Yp, Zp are the PCS XYZ values
Xd50, Yd50, Zd50 are the PCS XYZ white point values
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)将导致测量的设备XYZ值为D65。 这与sRGB设备的ICC配置文件中的媒体白点标签XYZ值不同。
toCIEXYZ
在类别
ColorSpace
colorvalue
- 长度至少为此ColorSpace中组件数量的浮点数组。
ArrayIndexOutOfBoundsException
- 如果数组长度至少不在此ColorSpace中的组件数量。
public float[] fromCIEXYZ(float[] colorvalue)
该方法使用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)。 用于CIEXYZ和CIEXYZ的方法中使用的色彩空间是由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缩放。 在该方法中,通过将PCS XYZ值乘以PCS白点(D50)与设备白点的比例,将每个设备XYZ值转换为PCS XYZ值。
Xd, Yd, Zd are the device XYZ values
Xdw, Ydw, Zdw are the device XYZ white point values
Xp, Yp, Zp are the PCS XYZ values
Xd50, Yd50, Zd50 are the PCS XYZ white point values
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)将导致测量的设备XYZ值为D65。 这与sRGB设备的ICC配置文件中的媒体白点标签XYZ值不同。
fromCIEXYZ
在类别
ColorSpace
colorvalue
- 长度至少为3的浮点数组。
ArrayIndexOutOfBoundsException
- 如果数组长度不小于3。
public float getMinValue(int component)
getMinValue
在类别
ColorSpace
component
- 组件索引。
IllegalArgumentException
- 如果组件小于0或大于numComponents - 1。
public float getMaxValue(int component)
getMaxValue
在类别
ColorSpace
component
- 组件索引。
IllegalArgumentException
- 如果组件小于0或大于numComponents - 1。