计算RGBA以匹配RGB颜色

时间:2012-12-28 01:39:12

标签: colors

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

我希望透明的alpha通道使用相同的颜色(或接近它)。我将在白色背景上绘制透明色。

如何计算RGBA颜色?

我想我要问的是opposite of this question

1 个答案:

答案 0 :(得分:5)

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

R 0 G 0 B 0 是原始颜色的组成部分,范围从0.0到1.0,并让 R G B A 是新RGBA颜色的组成部分( A = 1表示100%不透明度)。我们知道颜色必须满足:

  

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

如果我们知道 A ,我们可以轻松解决 R G B :< / p>

  

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 < / em> 0 ≥A,1 - G 0 ≥A和1 - B 0 < / sub>≥A,因此 A 的最小可能值为:

  

A = max(1 - R 0 ,1 - G 0 ,1 - B 0 )= 1 - min( R 0 G 0 B 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


聚苯乙烯。对于黑色背景,相同的公式会更简单:

  

A = max( R 0 G 0 B 0
   R = R 0 / A
   G = G 0 / A
   B = B 0 / A


PPS。只是为了澄清,上面的所有公式都是针对 - 预乘的RGBA颜色。对于预乘alpha,只需将 R G B 乘以 A 计算得出:

  

R = A ·(1 - (1 - R 0 )/ A < / em>)= 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 0 G = G 0 B = B 0 。)