【问题标题】:How to blend alpha values?如何混合 alpha 值?
【发布时间】:2011-04-25 23:23:03
【问题描述】:

在 Java 的 AWT 中,alpha(不透明度)使用从 0(完全透明)到 255(完全不透明)的值表示。如何正确混合 alpha 值,例如实现淡入淡出效果?如果子元素相对于其父元素的 alpha 为 200,而父元素的 alpha 为 100,那么最终绘制的像素的 alpha 是多少?

【问题讨论】:

标签: java alpha alphablending graphics2d


【解决方案1】:

您对像素 Alpha 值的控制程度如何?你在寻找什么样的淡入淡出效果?

默认情况下,不同的图形系统可能会实现不同的 alpha 操作。我认为最直观且通常默认的方法是:

   DestColor = DestColor * (1 - SourceAlpha) + SourceColor * SourceAlpha
   DestAlpha left as-is

使用此方案,源 alpha 仅影响目标表面的颜色分量,而不影响目标表面 alpha 本身。

我不确定 AWT 的行为如何,或者它是否可以让您对 alpha 混合操作进行任何级别的控制,但理论上 alpha 可以以多种不同的方式应用。

【讨论】:

    【解决方案2】:

    我认为这是对的:child means 的 alpha 值为 200

    blended = 200/255 * child + (1 - 200/255) * parent
    

    我们已经习惯了这个像素值,但我们也可以以相同的方式插入 Alpha 通道。我们必须假设child 的“真实”alpha 值为 255:

    blended = 255 * 200/255   +     100 * (1 - 200/255)
              child.alpha           parent.alpha
    

    大约是 222。

    This question 也可能有用。

    【讨论】:

    • 这取决于您使用的混合功能。有很多(尽管看起来确实是最常见的……)
    • 这只是一个标准的线性插值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2011-12-14
    • 2010-11-20
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多