将RGBA计算以匹配RGB颜色

6

如果我有一个RGB颜色,透明度为100%。

我想要具有透明Alpha通道的相同颜色(或接近它)。 我将在白色背景上涂上透明颜色。

如何计算RGBA颜色?

我想我正在询问与此问题相反的问题。

1个回答

5
您是指希望得到最大透明度的RGBA颜色,当它在白色背景上绘制时,可以呈现原始RGB颜色吗?
设原始颜色的三个分量R0、G0和B0均在0.0到1.0之间,让新的RGBA颜色的四个分量R、G、B和A(其中A = 1表示100%不透明)。 我们知道颜色必须满足以下条件:
R0 = A·R + (1−A) G0 = A·G + (1−A) B0 = A·B + (1−A)
如果我们知道了A,就可以轻松地解出R、G和B:
R = (R0 − 1 + A) / A = 1 − (1 − R0) / A G = (G0 − 1 + A) / A = 1 − (1 − G0) / A B = (B0 − 1 + A) / A = 1 − (1 − B0) / A
由于我们要求R≥0,G≥0和B≥0,因此有1 − R0 ≥ A,1 − G0 ≥ A和1 − B0 ≥ A,因此A的最小可能值为:

A = max( 1 - R0, 1 - G0, 1 - B0 ) = 1 - min( R0, G0, B0 )

因此,我们想要的颜色是:

A = 1 - min( R0, G0, B0 )
R = 1 - (1 - R0) / A
G = 1 - (1 - G0) / A
B = 1 - (1 - B0) / A


附注:对于黑色背景,同样的公式会更简单:

A = max( R0, G0, B0 )
R = R0 / A
G = G0 / A
B = B0 / A


附注2:为了澄清,上述所有公式都是针对“非预乘RGBA颜色”的。对于预乘alpha,只需将上面计算出的RGB乘以A即可:

R = A · ( 1 − (1 − R0) / A ) = R0 − (1 − A)
G = A · ( 1 − (1 − G0) / A ) = G0 − (1 − A)
B = A · ( 1 − (1 − B0) / A ) = B0 − (1 − A)

如果是黑色背景,则简单地使用 R = R0G = G0B = B0

以上是关于IT技术的内容,涉及到颜色值计算公式。

谢谢!所以这解决了最大的alpha值...是否有一个最小alpha值的公式(并且,冒昧一下,它们之间的范围)? - jedierikb
1
@jedierikb:嗯...上面给出的alpha值确实是最小值。最大值为_A_ = 1,其中 R = R0_,_G = G0B = _B0_。(是的,你可以在它们之间进行插值:只需选择任何有效的alpha值,并使用上述公式得到 R_,_G 和 _B_。) - Ilmari Karonen

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