如何基于alpha通道混合两种RGB颜色(正面和背面)

2024-10-02 10:25:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图组合两种RGBA颜色,以元组形式给出,比如(0,0,0,128)和(255,255,255,128)。我已经找到了this,它非常有用,但是我当前的代码(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之间。在


Tags: 代码alphaget颜色defgreenbluered
2条回答

正确的代码是:

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值。在

https://gist.github.com/JordanDelcros/518396da1c13f75ee057查看JavaScript中的解决方案

请注意,这个实现在[0,1]范围内有alpha,因此在混合之前将alpha值除以255,最后将最终alpha乘以255。在

相关问题 更多 >

    热门问题