计算RGBA以匹配RGB颜色

jed*_*ikb 6 colors

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

我想要一个透明的alpha通道相同的颜色(或接近它).我将在白色背景上绘制透明色.

如何计算RGBA颜色?

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

Ilm*_*nen 5

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

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

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

如果我们知道A,我们可以很容易地解决R,GB:

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.

由于我们需要ř ≥0,g ^ ≥0和 ≥0,它遵循一个1 - [R 0 ≥A,1 - g ^ 0 ≥A和1 - 0 ≥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)/ 一个


PS.对于黑色背景,相同的公式甚至更简单:

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


PPS.只是为了澄清,上面的所有公式都是针对预乘的RGBA颜色.对于预乘alpha,只需将上面计算的R,GB乘以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 0,G = G 0B = B 0.)