0

純粋な AS3 には、pixelbender と大きなビットマップがあります。pixelbender は、ビットマップの小さな領域のみに影響を与える距離パラメーターを使用して構成できます。問題は、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 で使用する代わりに、シェーダーを 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 に答える