2010-09-07 81 views
8

讓我們假設alpha爲1表示完全不透明,0表示完全透明。 可以說我有兩個黑色的圖像,其中有50%的透明度(alpha = 0.5)。混合兩種透明顏色時alpha值的公式

如果它們彼此重疊,則產生的透明度爲0.75,對不對?

如果他們的alpha值爲0.25,結果會在0.5左右,對嗎?

如果他們的alpha爲0.9,結果會在0.97左右,對不對?

你怎麼能得到這些數字?

換句話說,我正在尋找一個函數,從其他兩個alpha值中獲取得到的alpha值。

float alpha = f(float alphaBelow, float alphaAbove) 
{ 
    //TODO implement 
} 
+0

傳統上,alpha = 1時顏色不透明,alpha = 0時顏色完全透明。因此,在50%上面放置50%的結果alpha應該是25%,而不是75%。 – kennytm 2010-09-07 12:54:40

+0

@KennyTM,好吧,我會編輯我的帖子,使用浮動從0到1 – clamp 2010-09-07 12:58:57

回答

6

這個答案是數學上Jason's answer一樣的,但是這是實際的公式,你會在參考材料中找到它。

float blend(float alphaBelow, float alphaAbove) 
{ 
    return alphaBelow + (1.0 - alphaBelow) * alphaAbove; 
} 
6
float blend(float alphaBelow, float alphaAbove) 
{ 
    return alphaBelow + alphaAbove - alphaBelow * alphaAbove; 
} 

此函數假定這兩個參數是0..1,其中0表示完全透明,1表示完全不透明。

+0

謝謝,這幾乎就像我希望的結果。只是當我在Photoshop中比較兩個圖像的結果時,photoshop版本似乎具有更高的alpha值。 – clamp 2010-09-07 13:02:58

3

Photoshop中做如下計算:

float blend(float alphaBelow, float alphaAbove) 
{ 
    return min(1,alphaBelow+(1-alphaBelow)*alphaAbove); 
} 
+1

如果兩個輸入都在0..1範圍內,'min'是多餘的。 – 2012-05-02 18:58:03