如何混合alpha值?

时间:2011-04-25 23:23:04

标签: java alpha alphablending graphics2d

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

2 个答案:

答案 0 :(得分:1)

我认为这是对的: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也可能有用。

答案 1 :(得分:1)

你对像素alpha值有多少控制?你在寻找什么样的淡化效果?

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

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

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

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