2011-04-25 111 views
1

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

+1

请参阅http://docstore.mik.ua/orelly/java-ent/jfc/ch04_07.htm – 2011-04-25 23:34:46

回答

1

你对像素阿尔法值有多少控制?你在寻找什么样的淡入淡出效果?

不同的图形系统默认情况下可能会实现不同的alpha操作。我觉得一个是最直观的,因而通常是默认的是:

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

采用这种方案,源阿尔法只会影响到目标表面的颜色分量,而不是目标表面的α本身。

我不确定AWT是如何工作的,或者它是否能够控制alpha混合操作的任何级别,但alpha可以在理论上以多种不同的方式应用。

1

我认为这是正确的:200阿尔法childmeans

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

我们已经习惯了这样的像素值,但我们也可以插在相同的方式alpha通道。我们必须假装的child“真正的”阿尔法值为255:

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

这大约是222

This question也可能是有用的。

+0

这取决于您正在使用哪种混合功能。有很多(虽然看起来像最常见的那个......) – 2011-04-25 23:40:31

+0

这只是一个标准的线性插值。 – YXD 2011-04-25 23:41:04