Module java.desktop
Package java.awt.color

Class 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)。

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

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

对于简单的应用程序来说,这个类的细节并不重要,这些应用程序会在默认颜色空间中绘制或处理和显示具有已知颜色空间的导入图像。在大多数情况下,这些应用程序只需要通过ColorSpace.getInstance(int)获取一个默认颜色空间。

参见:
  • Constructor Details

    • ICC_ColorSpace

      public ICC_ColorSpace(ICC_Profile profile)
      从一个ICC_Profile对象构造一个新的ICC_ColorSpace
      参数:
      profile - 指定的ICC_Profile对象
      抛出:
      IllegalArgumentException - 如果配置文件不适合表示ColorSpace
  • Method Details

    • getProfile

      public ICC_Profile getProfile()
      返回此ICC_ColorSpaceICC_Profile
      返回:
      ICC_ColorSpaceICC_Profile
    • toRGB

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

      此方法使用设计用于产生输入和输出颜色之间最佳感知匹配的算法来转换颜色值。为了对颜色值进行色度转换,您应该首先使用此颜色空间的toCIEXYZ方法从输入颜色空间转换到CS_CIEXYZ颜色空间,然后使用CS_sRGB颜色空间的fromCIEXYZ方法从CS_CIEXYZ转换到输出颜色空间。有关更多信息,请参阅toCIEXYZfromCIEXYZ

      指定者:
      toRGB 在类 ColorSpace
      参数:
      colorvalue - 至少与此ColorSpace中组件数量相同的长度的浮点数组
      返回:
      长度为3的浮点数组
      抛出:
      ArrayIndexOutOfBoundsException - 如果数组长度不至少为此ColorSpace中组件数量
    • fromRGB

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

      此方法使用设计用于产生输入和输出颜色之间最佳感知匹配的算法来转换颜色值。为了对颜色值进行色度转换,您应该首先使用CS_sRGB颜色空间的toCIEXYZ方法从输入颜色空间转换到CS_CIEXYZ颜色空间,然后使用此颜色空间的fromCIEXYZ方法从CS_CIEXYZ转换到输出颜色空间。有关更多信息,请参阅toCIEXYZfromCIEXYZ

      指定者:
      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)。方法toCIEXYZfromCIEXYZ中使用的颜色空间是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)。方法toCIEXYZfromCIEXYZ中使用的颜色空间是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