我有一个带有 alpha 通道的 BitmapData 对象。我想知道在 ActionScript3 (FlashPlayer10) 中偏移 alpha 通道的最快方法。通过偏移,我的意思是在一个方向上移动该通道的所有像素(环绕图像边界),同时保持颜色通道不变。
有没有一种好方法可以将这种变换仅应用于一个通道?
我有一个带有 alpha 通道的 BitmapData 对象。我想知道在 ActionScript3 (FlashPlayer10) 中偏移 alpha 通道的最快方法。通过偏移,我的意思是在一个方向上移动该通道的所有像素(环绕图像边界),同时保持颜色通道不变。
有没有一种好方法可以将这种变换仅应用于一个通道?
您可以使用 Adobe PixelBender 进行这种操作,或者在 ActionScript 中手动编写(使用 getVector/setVector)。然而,移动 alpha 通道听起来是个坏主意,因为所有颜色都存储有预乘的 alpha。
这意味着您将持续损失精度。
我认为我将如何解决这个问题是创建原始 bitmapData 对象的 clone() 。保持原件不变。使用克隆,以您想要的方式移动所有像素。没有内置的“带有进位的滚动”,但它并不太难。这是其中的一些代码,但是如果您只做一个方向,则可以大大简化它:
http://www.actionscript.org/forums/showthread.php3?p=767722
滚动后,使用 copyChannel() 将 alpha 通道从滚动的克隆复制回原始通道。