【问题标题】:computing RGBA to match an RGB color计算 RGBA 以匹配 RGB 颜色
【发布时间】:2012-12-13 08:46:51
【问题描述】:

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

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

如何计算 RGBA 颜色?

我猜我要问的是opposite of this question

【问题讨论】:

    标签: colors


    【解决方案1】:

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

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

    R0 = A·R + (1 − A)
    G0 = A·G + (1 − A)
    B0 = A·B + (1 − A)

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

    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,只需将上面计算的 RGB 乘以 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 = G0B = B0.)

    【讨论】:

    • 谢谢!所以这解决了最大阿尔法......是否有最小阿尔法的公式(以及,推我的运气,两者之间的范围)?
    • @jedierikb: 嗯...上面给出的alpha值最小值。最大值为A = 1,其中R = R0G = G0 B = B0。 (是的,您可以在它们之间进行插值:只需选择任何有效的 alpha 值并使用上面的公式来获得 RGB。 )
    猜你喜欢
    • 2011-01-04
    • 2011-11-24
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多