从2种颜色计算得到的RGB,其中一种是透明的

问题描述:

我在寻找一个公式来转换它们。从2种颜色计算得到的RGB,其中一种是透明的

我知道要转换的一般透明度是

阿尔法·新+(1 - α)*老

我:

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中对其进行了测试。

+0

错字在问题中? – 2010-08-17 19:37:49

+0

你从哪里得到你的例子?什么程序创建它们?它是否使用任何颜色校正? – 2010-08-17 19:42:07

+0

示例来自我正在处理的网页,photoshop创建了这些图像,但它们正在网上实施。 – 2010-08-17 20:01:50

看来您的公式恰好是您的示例中使用的公式,按每个组件计算并四舍五入。

R_C:=天花板(R_A *阿尔法)+天花板(R_B *(1 - α))

G_c := ceiling(G_a * alpha) + ceiling (G_b * (1 - alpha)) 
B_c := ceiling(B_a * alpha) + ceiling (B_b * (1 - alpha)) 

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

+0

'天花板(85 * 0.9)= 77'(R-a * alpha)高于65,我在做什么? – 2010-08-17 19:32:05

+0

@Kerry:我不确定。我写了一个小程序来测试方程,并观察到在你的测试案例中,绿色和蓝色值符合公式,但R没有。 – kbrimington 2010-08-17 19:36:27

+0

你的解决方案是正确的 - 我在Photoshop中检查它,它工作正常。它以某种方式与Firefox有关。 – 2010-08-17 20:59:30