通过组合两种颜色确定接收到的RGBA颜色

11

我有两个颜色,用RGBA表示(在我的具体示例中,一个集合是[带有alpha值0.85的白色]和[带有alpha值0.25的57、40、28)。 第二种颜色会覆盖第一种颜色(即白色带alpha值作为背景,第二种颜色用于绘制)。 如何确定组合后的RGBA颜色是什么? 我只需要这样做一次 - 所以任何工具都可以(例如,我很乐意在Photoshop中绘制一些东西并查看输出结果)。

我有几个集合要组合,但不算太多。 有什么指导吗?谢谢。

1个回答

22

使用画家算法时,大多数颜色合成都是使用Porter-Duff的“覆盖”模式:

生成的Alpha值为:

αr = αa + αb (1 - αa)

最终颜色组件:

Cr = (Ca αa + Cb αb (1 - αa)) / αr

那么以你的例子为例:

alpha = 0.25 + 0.85 * (1 - 0.25)                        = 0.8875

red   = (57 * 0.25 + 255 * 0.85 * (1 - 0.25)) / 0.8875  = 199.2
green = (40 * 0.25 + 255 * 0.85 * (1 - 0.25)) / 0.8875  = 194.4
blue  = (28 * 0.25 + 255 * 0.85 * (1 - 0.25)) / 0.8875  = 191.1

参见维基百科关于阿尔法合成的文章


太好了,谢谢!只是你似乎把颜色搞反了。如果我按照那篇文章的方法操作,我需要在你的答案中交换这两个颜色。 - Aleks G
哎呀,我没有仔细阅读问题,把白色放在了前景。但你是对的:Ca 是前景,Cb 是背景。 - Nikolai Ruhe
我对这里使用的符号感到困惑。aα是同一个变量还是不同的变量? - Anderson Green
@AndersonGreen αaαbαr是三个变量。它们分别代表第一个源(a),第二个源(b)和结果(r)的alpha分量。 - Nikolai Ruhe
@NikolaiRuhe 那么 CrCaCb 分别代表什么呢? - Anderson Green
@AndersonGreen 它们代表所有三种颜色组件,再次使用 r 代表结果,a 和 b 代表源。 - Nikolai Ruhe

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