我有两个带有 alpha 通道的 BitmapData 对象。我想通过对每个通道(包括 alpha)使用 max(channel_image_one, channel_image_two) 将它们组合成一个。有没有一种简单的方法可以实现这个结果?
问问题
1321 次
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 回答