0

標準の ActionScript ぼかしフィルターを使用して画像をぼかしています。イメージは後で円柱のテクスチャ マップとして使用されます。つまり、左端と右端が 3D で交わります。これは、ぼかしフィルターが画像の端に不連続性を持っているため、見栄えが悪くなります。画像をラップするように設定して、フィルターカーネルを切り捨てる代わりにモジュロ演算を実行して、反対側からピクセルを取得するように設定したいと思います。それはまったく可能ですか?

そうでない場合 - ActionScript でそのような関数を自分で記述する最良の方法は何ですか? getPixel32 と setPixel32 を使用すると、大きな画像では非常に遅くなると思いますか?

4

1 に答える 1

1

オプション1:ぼかしの半径だけ拡張された画像を作成します。したがって、次のようなことを行います。buffer = new BitmapData(src.width + 2 * radius, src.height + 2 * radius, src.transparent, 0)次に、半径で変換された行列を使用してsrcをバッファに描画します。のようm = new Matrix()に、m.translate(radius, radius)そして最後に、で呼び出してcopyPixelsを呼び出すだけでbuffer.draw(src, m)buffer.applyFilter完了です。new BlurFilter(radius, radius)new Rectangle(radius, radius, src.width, src.height)

オプション2:ぼかし半径が変わらない場合は、AdobePixelBenderを使用します。モジュロを自分で書くことができますが、これは難しいことではありません。

オプション3:独自のガウスカーネルを実装します。これは、オプション1ほど高速になることはありませんが、オプション2よりも高速になります。これは、いつでも行列のn-1列をバッファリングして、n+1番目の列を計算できるためです。ただし、getPixel32を繰り返し呼び出す代わりに、BitmapData.getVectorを使用してピクセルバッファを1回取得します。

于 2009-12-30T13:14:31.227 に答える