如果我有RGB颜色,100%不透明度。
我希望透明的alpha通道使用相同的颜色(或接近它)。我将在白色背景上绘制透明色。
如何计算RGBA颜色?
我想我要问的是opposite of this question。
答案 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 。)