模块  java.desktop
软件包  java.awt.color

Class 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配置文件,例如抽象配置文件,设备链接配置文件和命名颜色配置文件,它们不包含适合表示颜色,图像或设备的颜色空间的信息(请参阅ICC_Profile)。 尝试从不适当的ICC配置文件创建ICC_ColorSpace对象是一个错误。

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

    此类的详细信息对于简单的小程序并不重要,这些小程序在默认颜色空间中绘制或操纵和显示具有已知颜色空间的导入图像。 最多,这样的applet需要通过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 - 一个float数组,其长度至少为此ColorSpace中的组件数。
        结果
        一个长度为3的float数组。
        异常
        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的浮点数组。
        结果
        一个float数组,其长度等于此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和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白点(D50)与设备白点的比率,将其转换为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 - 一个float数组,其长度至少为此ColorSpace中的组件数。
        结果
        一个长度为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)。 在CIEXYZ和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白点(D50)与设备白点的比率,将其转换为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的float数组。
        结果
        一个float数组,其长度等于此ColorSpace中的组件数。
        异常
        ArrayIndexOutOfBoundsException - 如果数组长度不是至少3。
      • getMinValue

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