2009-10-05 65 views
7

在石英2D中,CGColorSpaceCreateLab()函數採用限定的range參數如下:Quartz 2D:CGColorSpaceCreateLab:範圍參數的用途?

CGFloat的範圍[4]: 4個數字的數組,它指定有效的值的範圍爲a *和b *色彩空間的組件。 a *組件表示從綠色運行到紅色的值,而b *組件則表示從藍色運行到黃色的值。

問題是,這個參數實際上是什麼

我能想到至少三種可能的情況。

選項1:也許縮放分量值

說我有兩種顏色空間具有不同範圍:

CGFloat range1[] = { -10, 10, -10, 10 }; 
CGFloat range2[] = { -100, 100, -100, 100 }; 
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1); 
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2); 

我創建具有相同的元件值和規定範圍內的色彩每個空間:

CGFloat components[] = { 50, 10, 10, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components); 
CGColorRef color2 = CGColorCreate(space2, components); 

color1color2表示叔他是同一種顏色?還是range參數以某種方式縮放組件,使這兩種不同的顏色? (如果range後者,什麼樣的價值對應於標準CIELAB協調縮放

選項2:也許是剪輯元件值

鑑於兩個空格以上定義,說我創建下列顏色代替:

CGFloat components[] = { 50, 50, 50, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components); 
CGColorRef color2 = CGColorCreate(space2, components); 

現在做color1color2代表相同的顏色抑或是range參數夾的color1爲{50組件? ,10,10,1}? (如果後者有什麼意義?色域定義的極其粗略的近似值?確保數值保持在與另一種數據類型兼容的範圍內?)

選項3:可能在其他地方使用它,例如進行色域映射時具有感知渲染意圖

對L * a * b *值的期望範圍有一些想法可能有助於色域映射,特別是在感知情況下,但是再次,這似乎是這樣的粗略近似:I不明白爲什麼它會特別有用。

選項4:還有別的嗎?

回答

7

我做了一些測試,它看起來像答案是:

range參數縮放a *和b *組件值。

此外,組件值而不是似乎被剪切到指定的範圍。

因此,在下面的例子:

CGFloat range1[] = { -10, 10, -10, 10 }; 
CGFloat range2[] = { -100, 100, -100, 100 }; 
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1); 
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2); 

CGFloat components1[] = { 50, 10, 10, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components1); 

CGFloat components2[] = { 50, 100, 100, 1 }; 
CGColorRef color2 = CGColorCreate(space2, components2); 

CGColorRef color3 = CGColorCreate(space1, components2); 
  • color1color2代表相同的顏色。
  • color3似乎保留指定的組件值,即使它們超出了色彩空間指定的範圍。

最後,它看起來像{-127,127,-127,127}的範圍指定會產生具有標準CIELAB比例的a *和b *軸的色彩空間。

如果有人有更權威的答案,請發帖!