我有一个像素的RGB元组,我们称之为P.
(255,0,0)是P的颜色,alpha通道为1.0。
当alpha通道为0.8时,P的颜色变为(255,51,51)。
如何获得影响P颜色的像素颜色?
答案 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
其中:
这适合您示例的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
尝试使用其他示例(特别是非白色背景) - 它可能就是这么简单。如果没有,请使用新示例编辑您的答案,我将再看看。