Module  java.desktop
软件包  java.awt.color

Class ICC_ColorSpace

  • All Implemented Interfaces:
    Serializable


    public class ICC_ColorSpace
    extends ColorSpace
    ICC_ColorSpace类是抽象ColorSpace类的一个实现。 这种与设备无关和设备相关色彩空间的表示基于国际色彩联盟规范ICC.1:2001-12,色彩档案格式(见http://www.color.org )。

    通常,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()获得默认的颜色空间。

    另请参见:
    ColorSpaceICC_ProfileSerialized Form
    • 构造方法详细信息

      • ICC_ColorSpace

        public ICC_ColorSpace​(ICC_Profile profile)
        从ICC_Profile对象构造一个新的ICC_ColorSpace。
        参数
        profile - 指定的ICC_Profile对象
        异常
        IllegalArgumentException - 如果配置文件不适合代表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

        Specified by:
        toRGBColorSpace
        参数
        colorvalue - 长度至少为此ColorSpace中组件数量的浮点数组。
        结果
        长度为3的浮点数组。
        异常
        ArrayIndexOutOfBoundsException - 如果数组长度至少不在此ColorSpace中的组件数量。
      • fromRGB

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

        该方法使用旨在产生输入和输出颜色之间最佳感知匹配的算法来转换颜色值。 为了进行颜色值的比色转换,您应该使用CS_sRGB颜色空间的toCIEXYZ方法首先将输入颜色空间转换为CS_CIEXYZ颜色空间,然后使用此颜色空间的fromCIEXYZ方法将其从CS_CIEXYZ转换为输出颜色空间。 有关详细信息,请参阅toCIEXYZfromCIEXYZ

        Specified by:
        fromRGBColorSpace
        参数
        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)。 用于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值不同。

        Specified by:
        toCIEXYZColorSpace
        参数
        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)。 用于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值不同。

        Specified by:
        fromCIEXYZColorSpace
        参数
        colorvalue - 长度至少为3的浮点数组。
        结果
        长度等于此ColorSpace中组件数量的浮点数组。
        异常
        ArrayIndexOutOfBoundsException - 如果数组长度不小于3。
      • getMinValue

        public float getMinValue​(int component)
        返回指定组件的最小标准化颜色分量值。 对于TYPE_XYZ空格,此方法为所有组件返回最小值0.0。 对于TYPE_Lab空格,此方法对于L和b组件返回0.0,L和-128.0。 这与ICC规范中的XYZ和Lab Profile连接空间的编码一致。 对于所有其他类型,此方法对所有组件返回0.0。 当使用具有需要不同最小组件值的配置文件的ICC_ColorSpace时,需要对此类进行子类化并覆盖此方法。
        重写:
        getMinValueColorSpace
        参数
        component - 组件索引。
        结果
        最小归一化分量值。
        异常
        IllegalArgumentException - 如果组件小于0或大于numComponents - 1。
        从以下版本开始:
        1.4
      • getMaxValue

        public float getMaxValue​(int component)
        返回指定组件的最大标准化颜色分量值。 对于TYPE_XYZ空格,此方法为所有组件返回最大值为1.0 +(32767.0 / 32768.0)。 对于TYPE_Lab空格,此方法对于L和B组件返回100.0和127.0。 这与ICC规范中的XYZ和Lab Profile连接空间的编码一致。 对于所有其他类型,此方法对所有组件返回1.0。 当使用ICC_ColorSpace与配置文件需要不同的最大组件值时,有必要对此类进行子类化并覆盖此方法。
        重写:
        getMaxValueColorSpace
        参数
        component - 组件索引。
        结果
        最大归一化分量值。
        异常
        IllegalArgumentException - 如果组件小于0或大于numComponents - 1。
        从以下版本开始:
        1.4