如何根据Alpha通道混合两个RGB颜色(前景和背景)

3
我正在尝试将两个以元组形式给出的RGBA颜色进行合并,例如(0, 0, 0, 128)和(255, 255, 255, 128)。我已经找到了这篇文章,对我很有帮助,但是我的当前代码是Python。
def get_color(colorRGBA1, colorRGBA2):
    alpha = 255 - (255 - colorRGBA1[3]) * (255 - colorRGBA2[3])
    red   = (colorRGBA1[0] * (255 - colorRGBA2[3]) + colorRGBA2[0] * colorRGBA2[3]) / 255
    green = (colorRGBA1[1] * (255 - colorRGBA2[3]) + colorRGBA2[1] * colorRGBA2[3]) / 255
    blue  = (colorRGBA1[2] * (255 - colorRGBA2[3]) + colorRGBA2[2] * colorRGBA2[3]) / 255
    return (int(red), int(green), int(blue), int(alpha))

某些情况下,返回一些奇怪的数字(如-15874)作为alpha值。其他所有内容都正常工作,但我无法弄清楚如何获取新颜色的alpha值。

两种颜色的alpha值将在0到255之间。

2个回答

5
正确的代码应该是:

正确的代码如下:

def get_color(colorRGBA1, colorRGBA2):
    alpha = 255 - ((255 - colorRGBA1[3]) * (255 - colorRGBA2[3]) / 255)
    red   = (colorRGBA1[0] * (255 - colorRGBA2[3]) + colorRGBA2[0] * colorRGBA2[3]) / 255
    green = (colorRGBA1[1] * (255 - colorRGBA2[3]) + colorRGBA2[1] * colorRGBA2[3]) / 255
    blue  = (colorRGBA1[2] * (255 - colorRGBA2[3]) + colorRGBA2[2] * colorRGBA2[3]) / 255
    return (int(red), int(green), int(blue), int(alpha))

我需要将 (255 - colorRGBA1[3]) * (255 - colorRGBA2[3]) 除以 255 才能得到有效的 alpha 值。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接