我有我们称之为P.像素的RGB元组
(255,0,0)是P的与1.0 alpha通道的颜色。
与0.8α通道,P的颜色变为(255,51,51)。
我怎样才能得到所影响普的颜色像素的颜色?
我有我们称之为P.像素的RGB元组
(255,0,0)是P的与1.0 alpha通道的颜色。
与0.8α通道,P的颜色变为(255,51,51)。
我怎样才能得到所影响普的颜色像素的颜色?
让我们从头开始。 阿尔法像素才有意义,当它是混有别的东西。 如果你有阿尔法上层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.0-0.8)*255 ~= 50.9 = 51
哪里:
这符合您的示例中的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)
而一些输出:
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
试试这个对于其他例子(尤其是非白色背景) - 它可能是这么简单。 如果没有,编辑与新的例子你的答案,我会再看看。