JavaTM 2 Platform
Standard Ed. 6

java.awt.color
類別 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)。

通常,Color 或 ColorModel 與 ICC 配置檔案相關聯,該配置檔案可以是輸入、顯示或輸出配置檔案(請參閱 ICC 規範)。還有其他型別的 ICC 配置檔案,如抽象配置檔案、設備連接配置檔案和指定顏色配置檔案,這些配置檔案不包含適合表示顏色、圖像或設備顏色空間的資訊(請參閱 ICC_Profile)。試圖從不適合的 ICC 配置檔案創建 ICC_ColorSpace 物件會產生錯誤。

ICC 配置檔案表示從配置檔案(如監視器)的顏色空間到配置檔案連接空間 (PCS) 的轉換。用於標記圖像或顏色的感興趣配置檔案有一個 PCS,它是 ICC 配置檔案格式規範中定義的設備無關空間(一個 CIEXYZ 空間和兩個 CIELab 空間)之一。大多數感興趣的配置檔案都具有可逆的轉換或顯式指定的雙向轉換。如果使用 ICC_ColorSpace 物件的方式需要從 PCS 到配置檔案本機空間的變換,並且沒有足夠的資料來正確執行轉換,則 ICC_ColorSpace 物件將在指定型別的顏色空間(如 TYPE_RGB、TYPE_CMYK 等等)中產生輸出,但是輸出資料的具體顏色值是不明確的。

此類別的細節對於這樣的簡單 applet 是不重要的:在預設顏色空間中進行繪圖,或者處理和顯示具有已知顏色空間的導入圖像。這種 applet 至多需要通過 ColorSpace.getInstance() 獲取預設的顏色空間之一。

另請參見:
ColorSpace, ICC_Profile, 序列化表格

欄位摘要
 
從類別 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
 
建構子摘要
ICC_ColorSpace(ICC_Profile profile)
          由 ICC_Profile 物件建構一個新的 ICC_ColorSpace。
 
方法摘要
 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 顏色空間中的值。
 
從類別 java.awt.color.ColorSpace 繼承的方法
getInstance, getName, getNumComponents, getType, isCS_sRGB
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

ICC_ColorSpace

public ICC_ColorSpace(ICC_Profile profile)
由 ICC_Profile 物件建構一個新的 ICC_ColorSpace。

參數:
profile - 指定的 ICC_Profile 物件
拋出:
IllegalArgumentException - 如果 profile 不適合表示 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

指定者:
類別 ColorSpace 中的 toRGB
參數:
colorvalue - 一個長度至少等於此 ColorSpace 中的份量數的 float 陣列。
返回:
一個長度為 3 的 float 陣列。
拋出:
ArrayIndexOutOfBoundsException - 如果陣列長度小於此 ColorSpace 中的份量數。

fromRGB

public float[] fromRGB(float[] rgbvalue)
將假定為預設 CS_sRGB 顏色空間中的顏色值轉換成此 ColorSpace 中的值。

此方法使用可在輸入和輸出顏色之間產生最佳感知比對的演算法來變換顏色值。為了完成顏色值的色度變換,應該首先使用 CS_sRGB 顏色空間的 toCIEXYZ 方法將顏色值從輸入顏色空間變換到 CS_CIEXYZ 顏色空間,然後使用此顏色空間的 fromCIEXYZ 方法將其從 CS_CIEXYZ 變換到輸出顏色空間。有關此內容的更多資訊,請參閱 toCIEXYZfromCIEXYZ

指定者:
類別 ColorSpace 中的 fromRGB
參數:
rgbvalue - 長度至少為 3 的 float 陣列。
返回:
一個長度等於 ColorSpace 中份量數的 float 陣列。
拋出:
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 值。

在設備 XYZ 值和此方法返回的 PCS XYZ 值之間的轉換對應於設備顏色空間(由 CIE 色度值表示)和 PCS 之間的轉換。此過程涉及了很多因素,其中有些因素相當微妙。但最重要的要算為解決設備白色點和 PCS 白色點之間的不同而進行的調整。有許多針對這種調整的技術,它是當前許多研究和爭論的主題。一些常用的方法是 XYZ 縮放、von Kries 轉換和 Bradford 轉換。應根據每個特定的應用來使用正確的方法。

最簡單的方法是 XYZ 縮放。在此方法中,可將每台設備的 XYZ 值變換成 PCS XYZ 值,方法是將每台設備的 XYZ 值乘以 PCS 白色點 (D50) 和設備白色點的比值。

 
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 之間的差異。設備白色點以對應於設備上所顯示的白色的設備 XYZ 值來表示。例如,在 sRGB 設備上顯示 RGB 顏色(1.0、1.0、1.0)將得到被測設備的 D65 XYZ 值。這與 sRGB 設備的 ICC 配置檔案中的介質白色點標記 XYZ 值不同。

指定者:
類別 ColorSpace 中的 toCIEXYZ
參數:
colorvalue - 一個長度至少等於此 ColorSpace 中的份量數的 float 陣列。
返回:
一個長度為 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)。在 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 值。

在設備 XYZ 值和此方法作為參數採用的 PCS XYZ 值之間的變換對應於設備顏色空間(由 CIE 色度值表示)和 PCS 之間的變換。此過程涉及了很多因素,其中有些因素相當微妙。但最重要的要算為解決設備白色點和 PCS 白色點之間的不同而進行的調整。有許多針對這種調整的技術,它是當前許多研究和爭論的主題。一些常用的方法是 XYZ 縮放、von Kries 轉換和 Bradford 轉換。應根據每個特定的應用來使用正確的方法。

最簡單的方法是 XYZ 縮放。在此方法中,可將每台設備的 XYZ 值變換成 PCS XYZ 值,方法是將每台設備的 XYZ 值乘以 PCS 白色點 (D50) 和設備白色點的比值。

 
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 之間的差異。設備白色點以對應於設備上所顯示的白色的設備 XYZ 值來表示。例如,在 sRGB 設備上顯示 RGB 顏色(1.0、1.0、1.0)將得到被測設備的 D65 XYZ 值。這與 sRGB 設備的 ICC 配置檔案中的介質白色點標記 XYZ 值不同。

指定者:
類別 ColorSpace 中的 fromCIEXYZ
參數:
colorvalue - 長度至少為 3 的 float 陣列。
返回:
一個長度等於 ColorSpace 中份量數的 float 陣列。
拋出:
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 時,需要為此類別創建子類別並覆寫此方法。

覆寫:
類別 ColorSpace 中的 getMinValue
參數:
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 和 Lab 配置檔案連接空間的編碼一致。對於所有其他型別,此方法為所有份量返回 1.0。使用具有要求不同最大份量值的配置檔案的 ICC_ColorSpace 時,需要為此類別創建子類別並覆寫此方法。

覆寫:
類別 ColorSpace 中的 getMaxValue
參數:
component - 份量索引。
返回:
最大標準化份量值。
拋出:
IllegalArgumentException - 如果 component 小於 0 或大於 numComponents - 1。
從以下版本開始:
1.4

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only