Java 如何混合alpha值?

Java 如何混合alpha值?,java,alpha,alphablending,graphics2d,Java,Alpha,Alphablending,Graphics2d,在Java的AWT中,alpha(不透明度)使用0(完全透明)到255(完全不透明)的值表示。如何正确混合alpha值,例如实现淡入效果?如果子元素相对于其父元素的alpha值为200,而父元素的alpha值为100,那么最终绘制的像素的alpha值是多少 我认为这是对的:child的alpha值为200 对于像素值我们已经习惯了,但是我们也可以用同样的方法插值alpha通道。我们必须假设child的“真实”alpha值为255: blended = 255 * 200/255 +

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

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

对于像素值我们已经习惯了,但是我们也可以用同样的方法插值alpha通道。我们必须假设
child
的“真实”alpha值为255:

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


也可能有用。

您对像素alpha值有多少控制?你想要什么样的褪色效果

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

   DestColor = DestColor * (1 - SourceAlpha) + SourceColor * SourceAlpha
   DestAlpha left as-is
使用此方案,源alpha仅影响目标曲面的颜色分量,而不影响目标曲面alpha本身


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

请看它取决于您使用的混合函数。有相当多的(虽然这看起来像是最常见的一个…)它只是一个标准的线性插值。
   DestColor = DestColor * (1 - SourceAlpha) + SourceColor * SourceAlpha
   DestAlpha left as-is