需要帮助了解Alpha频道

时间:2011-01-30 01:47:01

标签: image-processing transparency alpha alphablending alpha-transparency

我有一个像素的RGB元组,我们称之为P.

(255,0,0)是P的颜色,alpha通道为1.0。

当alpha通道为0.8时,P的颜色变为(255,51,51)。

如何获得影响P颜色的像素颜色?

2 个答案:

答案 0 :(得分:6)

让我们从头开始。具有alpha的像素只有在与其他东西混合时才有意义。如果你有一个带有alpha的上层U和一个完全不透明的下层L,则公式为:

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

重新排列公式,您将获得:

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

显然,当alpha为1.0时,等式没有意义,因为你要除以零。

插入数字显示像素L的R = 255,G = 255和B = 255。

按照惯例,图像中的最低层几乎是全白的(255,255,255)。

答案 1 :(得分:3)

只看你提供的数字:

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

其中:

  • 1.0是最大alpha强度
  • 0.8是当前设置的alpha强度
  • 255是每个RGB通道的最大强度(背景颜色)

这适合您示例的B和G频道。

因此,在一般情况下,它似乎是通道值(RGB)和背景颜色(在您的情况下,白色 - 255)之间的简单加权平均值。 Alpha被用作重​​量。

这是一些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)

还有一些输出:

misha@misha-K42Jr:~/Desktop/stackoverflow$ python alpha.py 255 0.8
255.0
misha@misha-K42Jr:~/Desktop/stackoverflow$ python alpha.py 0 0.8
51.0

尝试使用其他示例(特别是非白色背景) - 它可能就是这么简单。如果没有,请使用新示例编辑您的答案,我将再看看。