1

我有一個像素的RGB元組,我們稱之爲P.需要幫助瞭解Alpha通道

(255,0,0)是Alpha通道爲1.0時P的顏色。

當alpha通道爲0.8時,P的顏色變爲(255,51,51)。

如何獲得影響P顏色的像素顏色?

回答

6

讓我們從頭開始。帶alpha的像素只有在與其他東西混合時纔有意義。如果你有阿爾法上層U和下部層L是完全不透明,該方程爲:

P = (alpha * U) + ((1.0 - alpha) * L) 

重新整理公式,則獲得:

L = (P - (alpha * U))/(1.0 - alpha) 

顯然等式不當alpha爲1.0時是有意義的,因爲你會被零除。

在堵你的數字顯示,R = 255,G = 255和B = 255用於像素L.

這幾乎是普遍的是圖像中的最下層將是全白(255,255,255)由慣例。

+1

+1瞭解實際問題是 – misha 2011-01-30 04:42:09

3

只是看你提供的數字:

(1.0-0.8)*255 ~= 50.9 = 51 

其中:

  • 1.0是最大的α強度
  • 0.8是當前設定的阿爾法強度
  • 255是最大每個RGB通道的強度(背景顏色)

這適合你的例子的B和G頻道。

所以,在一般情況下,它似乎是通道值(RGB)和背景顏色(在你的情況下,白色 - 255)之間的簡單加權平均值。阿爾法被用作重量。

下面是一些Python代碼:

MIN_ALPHA=0.0 
MAX_ALPHA=1.0 
MIN_CH=0 
MAX_CH=255 
BG_VAL=255 

def apply_alpha(old, alpha, bg=255): 
    assert alpha >= MIN_ALPHA 
    assert alpha <= MAX_ALPHA 
    assert old >= MIN_CH 
    assert old <= MAX_CH 

    new = old*alpha + (MAX_ALPHA - alpha)*bg 
    return new 

if __name__ == '__main__': 
    import sys 
    old, alpha = map(float, sys.argv[1:]) 
    print apply_alpha(old, alpha) 

和一些輸出:

[email protected]:~/Desktop/stackoverflow$ python alpha.py 255 0.8 
255.0 
[email protected]:~/Desktop/stackoverflow$ python alpha.py 0 0.8 
51.0 

試試這個其他的例子(尤其是非白色背景) - 它可能是這麼簡單。如果沒有,用新的例子編輯你的答案,我會再看一次。