【发布时间】:2012-12-13 08:46:51
【问题描述】:
如果我有 100% 不透明度的 RGB 颜色。
我想要具有透明 Alpha 通道的相同颜色(或接近它)。我将在白色背景上绘制透明颜色。
如何计算 RGBA 颜色?
我猜我要问的是opposite of this question。
【问题讨论】:
标签: colors
如果我有 100% 不透明度的 RGB 颜色。
我想要具有透明 Alpha 通道的相同颜色(或接近它)。我将在白色背景上绘制透明颜色。
如何计算 RGBA 颜色?
我猜我要问的是opposite of this question。
【问题讨论】:
标签: colors
你的意思是你想要具有最大透明度的 RGBA 颜色,当在白色背景上绘制时,它会给出原始的 RGB 颜色?
令R0、G0和B0 为原色的分量,取值范围为0.0~1.0,设R、G、B、A 是新 RGBA 颜色的组成部分(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 em>
G = G0 / A
B = B0 / A
Pps。澄清一下,以上所有公式都是针对 非 预乘 RGBA 颜色的。对于预乘 alpha,只需将上面计算的 R、G 和 B 乘以 A,得到:
R = A · ( 1 - (1 - R0) / A ) = R0 - (1 - A)
G = A · ( 1 - (1 - G0) / A ) = G 0 - (1 - A)
B = A · ( 1 - (1 - B0) / A ) = B0 - (1 - A)
(或者,对于黑色背景,只需 R = R0, G = G0 和 B = B0.)
【讨论】: