これは私が爪たかったバグのようなものだったように私は、テストのためだけに作られた以下のコードを、持っている:BitmapDataオブジェクトにシェーダフィルタを適用すると、渡された矩形が無視されます。シェーダフィルタを正しく適用する方法は?
_shader = new Shader(new TheShader() as ByteArray);
_shader.data.width.value = [64.0];
_shader.data.height.value = [64.0];
_shaderFilter = new ShaderFilter(_shader);
_sequence = new Vector.<BitmapData>();
var smallBD:BitmapData;
var i:int;
_delta = new Point();
var megabase:BitmapData = new TheBitmap().bitmapData;
var _rect:Rectangle = new Rectangle(0, 0, 64, 64);
for (i = 0; i < 64; i++) {
smallBD = new BitmapData(64, 64, true, 0x00808080);
//_rect.x = i;
_rect.y = i;
smallBD.applyFilter(megabase, _rect, _delta, _shaderFilter);
_sequence.push(smallBD);
}
_sequenceてそれから私サイクル変更矩形が実際に何かをするかどうかを確認するために。 _shaderFilterが実際にシェーダフィルタであれば、何もしません。組み込みのFlashフィルタを使ったテストは意図したとおりに動作しますが、ShaderFilterでは、供給された矩形がsourceBitmapData.rectであるかのように動作することがありますが、ソースビットマップが何であれ、奇妙な位置にあります - サイズ512x384のビットマップでは、シェーダに渡される領域の端は明らかに(256,192)またはビットマップの中央にあります。これまでは回避策を実装することしかできませんでした。つまり、必要な領域を最初にcopyPixels()した後、applyFilter()を実行します。誰かがそれがバグだと私に何か間違っていることを証明することはできますか?
PS:Flash Player 10.3のプロジェクトターゲットでFlashDevelopを使用していますが、FP11でこれを修正してもわかりません。
お試しいただきありがとうございます! FP11ターゲットでコンパイルしてみて、それが同じで動作するかどうかチェックしましたか? – Vesper
@Vesperはい、私は10と11でそれを試しました。両方で同じ結果(スクリーンショットは11からです) – Dave