0

我有两个带有 alpha 通道的 BitmapData 对象。我想通过对每个通道(包括 alpha)使用 max(channel_image_one, channel_image_two) 将它们组合成一个。有没有一种简单的方法可以实现这个结果?

4

2 回答 2

2

我不认为有直接的位图数据方法可以以这种方式合并 Alpha 通道。RGB也许可以在draw()的帮助下应用混合模式,但我认为如果你需要一个严格的每个通道的最大值,它就行不通了)。

此外,您可以通过PixelBender创建一个着色器来执行此任务。它是进行此类操作的完美工具。

如果您不习惯 PB,性能会降低,但设置起来会更快,您可以使用 BitmapData.getPixel32()/setPixel32() 逐个迭代/比较/写入像素。如果您这样做,请考虑使用 BitmapData.lock()/unlock() 来提高性能。

于 2010-02-03T02:21:50.500 回答
0

如果你想要 max(image_one,image_two) 应该相当于LIGHTEN混合模式。

这是Foundation ActionScript 3.0 Image Effects的片段:

public function lighten(topPixel:uint, bottomPixel:uint):uint{
   return Math.max(topPixel,bottomPixel);
}

您可以从源 zip的第 2 章文件夹中获取所需的文件。

使用 Theo 的建议

  • 锁()
  • for 循环
  • 开锁()

使用 BitmapData 提高速度或使用 PixelBender。显然,根据Adob ​​e 的说法,超过 90% 的 Flash Player 用户已经在使用版本 10。

于 2010-02-03T03:04:19.467 回答