2013-03-30 87 views
1

想象一下,我們有兩種ARGB顏色c1和c2。「100%紅色時爲50%藍色」與「100%藍色時爲50%紅色」

背景c2上的50%(alpha)c1與背景c1上的50%c2有什麼區別?

使用公式out = alpha * new + (1 - alpha) * old(來自another thread),兩者都將具有相同的結果:

50% blue on 100% red = 0.5 * blue + (1 - 0.5) red = 0.5 * blue + 0.5 red 
100% red on 50% blue = 0.5 * red + (1 - 0.5) blue = 0.5 * red + 0.5 blue 
thus, 50% blue on 100% red = 100% red on 50% blue 

然而,Photoshop CS5聲稱 「100%藍色50%的紅色」 是100 #80007f和「50%的藍色%red「是#7f0080

因此,我想知道的是上述算法只適用於簡單真實逼近?

是否有另一個公式給我們更真實的結果?(由於Adobe是相當上有圖形方面,我會覺得這件事不太可能,他們曾經做過這樣一個簡單的四捨五入誤差)

+1

不是一個真正的編程問題... –

+0

@OliCharlesworth,用於顯示的RGB顏色在真實世界中不存在。它們只與電腦有關。程序員是否應該將100%的紅色與100%的藍色的50%的紅色相比呈現50%的藍色? – Pacerier

+0

你爲什麼對結果感到驚訝?帶有藍色覆蓋層的紅色背景與帶有紅色覆蓋層的藍色背景不同。例如,如果兩者都具有50%的透明度,結果將是相同的。如果藍色超過紅色,則基於透明度 - 如果不透明度較低,則會顯示更多紅色。另一種方式會顯示更多的藍色。這與使用帶有藍色或紅色疊加層的白色背景相似。他們看起來不一樣,因爲他們的透明度都是50%... –

回答

3

50%C1的C2和50%C2在C1上應該給完全相同的顏色,正如你已經注意到的非常簡單的算法。

所以混合紅色(#ff0000)和藍色(#0000ff)50-50應該給你#7f007f。如果您獲得#80007f足夠接近並且錯誤可能是由於其他原因導致的,例如,如果您的圖像不是RGB模式,而是HSL,或者Photoshop選擇使用HSL內部表示它。

其他錯誤可能會引起浮點計算和舍入錯誤。儘管如此,#80007f和#7f007f幾乎相同,所以如果photoshop開發者意識到這種不精確性,他們可能會選擇忽略它。

相關問題