从两种颜色计算结果RGB,其中一种是透明的。

9

我希望能找到一个公式来转换它们。

我知道将一般的透明度转换为以下公式:

alpha * new + (1 - alpha) * old

我有以下内容:

Color A : RGB( 85, 113, 135 )
Color B : RGB( 43, 169, 225 )

颜色A的不透明度为90%,覆盖在颜色B之上,导致

Color C : RGB( 65, 119, 145 )

我的问题是,它是如何得到颜色C的?如果我将颜色B替换为另一种颜色,我该如何得到颜色C?

这里有另一个例子,基础颜色相同:

Color A : RGB( 85, 113, 135 )
Color B : RGB( 45, 67, 82 )
--------
Color C : RGB( 65, 109, 131 )

这些都是使用图像完成的工作示例--我现在正在尝试计算剩余的颜色C,以便分配背景颜色。


更新,请查看已接受的答案。上述示例中的red很奇怪--已接受的答案对所有颜色都有正确的公式,我在Photoshop中进行了测试。


你的例子是从哪里获取的?使用了什么程序创建它们?它使用任何颜色校正吗? - Mark Ransom
例子来自我正在处理的网页,Photoshop已经创建了这些图像,但它们正在被实现在网站上。 - Kerry Jones
@Andreas -- 你能指出来吗?如果需要,我可以上传图片。 - Kerry Jones
1个回答

8
看起来你的公式正是例子中使用的公式,按组件计算并向上取整。
R_c := ceiling(R_a * alpha) + ceiling (R_b * (1 - alpha)) (已划掉)
G_c := ceiling(G_a * alpha) + ceiling (G_b * (1 - alpha))
B_c := ceiling(B_a * alpha) + ceiling (B_b * (1 - alpha))

奇怪的是,R成分似乎不遵循规则。我倾向于想知道为什么。

天花板(85 * 0.9) = 77,(R-a * alpha) 高于65,我有错过什么吗? - Kerry Jones
@Kerry:我不确定。我写了一个小程序来测试这个方程,观察到在你的测试案例中,绿色和蓝色的值符合公式,但是红色的值却没有。 - kbrimington
你的解决方案是正确的 - 我在Photoshop中检查过了,它可以正常工作。这与Firefox有些关系。 - Kerry Jones

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