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