0

在纯 AS3 中,我有一个像素弯曲器和一个大位图。pixelbender 可以使用距离参数进行配置,以仅影响位图的一小部分区域。问题是像素弯曲器正在整个位图上执行。仅更新位图受影响区域的最佳方法是什么?

鉴于此配置:

shader.data.image.input = referenceBitmap.bitmapData; // 300x200
shader.data.position = [150,100];
shader.data.distance = [20];

以下不起作用:

new ShaderJob(shader, 
              bitmap.bitmapData.getPixels(
                  new Rectangle(particle.x -10, 
                            particle.y -10,
                            20,
                            20))).start();

我可以创建一个临时数组来保存计算值,然后将它们复制回 bitmapData 数组。虽然我希望着色器直接更新 bitmapData 像素并且仅在受影响的区域上。

以下工作,但着色器在整个 300x200 位图上运行:

new ShaderJob(shader, bitmap.bitmapData).start();

有什么建议么?

编辑:过滤器将不起作用,因为有 3 个输入图像

4

1 回答 1

0

BitmapData 允许您使用一个名为applyfilter的函数。

除了尝试将 bitmapdata 与 shaderJob 一起使用,您还可以交替使用 shader 作为 shaderFilter 并在 bitmapdata 上应用 shaderfilter。

shader = new Shader(fr.data);
shaderFilter = new ShaderFilter();
shaderFilter.shader = shader;

一旦你有了你的 shaderFilter,你就可以在你的 bitmapData 上使用 applyFilter。就像是 :

referenceBitmap.bitmapData.applyFilter(bitmap.bitmapData,new Rectangle(particle.x -10, 
                        particle.y -10,
                        20,
                        20),new Point(0,0),shaderFilter);

希望这可以帮助。

于 2012-02-17T09:58:20.563 回答