6

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

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

如何计算 RGBA 颜色?

我想我要问的是这个问题的反面

4

1 回答 1

5

你的意思是你想要具有最大透明度的 RGBA 颜色,当在白色背景上绘制时,它会给出原始的 RGB 颜色?

R 0G 0B 0为原色的分量,取值范围为0.0~1.0,设RGBA为新RGBA颜色的分量(A =1表示100%不透明度)。我们知道颜色必须满足:

R 0 = A · R + (1 - A )
G 0 = A · G + (1 - A )
B 0 = A · B + (1 - A )

如果我们知道A,我们可以很容易地求解RGB

R = ( R 0 - 1 + A ) / A = 1 - (1 - R 0 ) / A
G = ( G 0 - 1 + A ) / A = 1 - (1 - G 0 ) / A
B = ( B 0 - 1 + A ) / A = 1 - (1 - B 0 ) / A

由于我们要求R ≥ 0、G ≥ 0 和B ≥ 0,因此 1 - R 0 ≥ A、1 - G 0 ≥ A 和 1 - B 0 ≥ A,因此 A 的最小可能值为

A = 最大值( 1 - R 0, 1 - G 0, 1 - B 0) = 1 - 最小值(R 0G 0B 0

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

A = 1 - min( R 0 , G 0 , B 0 )
R = 1 - (1 - R 0 ) / A
G = 1 - (1 - G 0 ) / A
B = 1 - (1 - B 0 ) /一个


附言。对于黑色背景,相同的公式会更简单:

A = 最大值(R 0G 0B 0
R = R 0 / A
G = G 0 / A
B = B 0 / A


pps。澄清一下,以上所有公式都适用于预乘 RGBA 颜色。对于预乘 alpha,只需将上面计算的RGB乘以A,得到:

R = A · ( 1 - (1 - R 0 ) / A ) = R 0 - (1 - A )
G = A · ( 1 - (1 - G 0 ) / A ) = G 0 - (1 - A )
B = A · ( 1 - (1 - B 0 ) / A ) = B 0 - (1 - A )

(或者,对于黑色背景,只需R = R 0G = G 0B = B 0。)

于 2012-12-28T03:10:44.917 回答