【问题标题】:How to blend 2 transparency layers?如何混合 2 个透明层?
【发布时间】:2018-11-15 14:41:55
【问题描述】:

例如,我们有 2 个透明层:第一个是 black (0, 0, 0, 0.75),第二个是 white (255, 255, 255, 0.64)。我不知道如何混合它们。

但我知道如何混合一层不透明层和一层透明层。它看起来像这样:https://wikimedia.org/api/rest_v1/media/math/render/svg/1e35c32f13d5eedc7ac21e9e566796dd048a31e6

【问题讨论】:

    标签: math alpha alphablending rgba alpha-transparency


    【解决方案1】:

    假设背景色为(C, 1)(RGB,A),第一层为(A, s),第二层为(B, t)。应用混合方程两次:

    C' = t * B + (1-t) * [s * A + (1-s) * C]
    
         = [t * B + (1-t) * s * A] + (1-t) * (1-s) * C
    

    我们可以看到新的有效混合系数为1 - (1-s) * (1-t)。要获得组合的透明度颜色,请将第一项除以:

    r := 1 - (1-s) * (1-t)
    
    D := [t * B + (1-t) * s * A] / r
    
    --> C' = r * D + (1-r) * C
    

    即新的有效透明层由(D, r) 给出。

    在您的示例中,值将是 D = (179, 179, 179)r = 0.91

    【讨论】:

    • 谢谢,但你能解释一下这个公式吗:r := 1 - (1-s) * (1-t) 我明白它是什么通用 alpha。但是我不明白这个公式中的操作。
    • @MaximPro 在第一个方程块中,我表明C 的系数是(1-s) * (1-t);这对应于维基百科等式中的"1 - A",因为C 对应于"B" 作为背景颜色。因此有效的阿尔法r(对应"A")是1减去这个系数。
    • 再次仔细阅读您的帖子并想通了,谢谢。
    • 我还有一个问题。为什么我们要划分有效 alpha (/r)?为什么不乘呢?
    • @MaximPro 抱歉回复晚了。这是因为您所说的乘法发生在混合期间,而我们需要计算有效的前景色,这需要相反的过程。无论如何,代数本身应该清楚。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多