4

マスクされたビットマップを含むコンテナがあります。このコンテナーのスケールと回転は実行時に変更され、マスクされたビットマップを描画する必要がありますが、適切なマトリックス計算を行うことができません。

私のコードは、回転せずにセンタリングするための位置、スケール、オフセットを反映するように正しく機能します。回転すると、角度は正しいのですが、配置が正しくありません。長方形を回転すると寸法が変わるためだと思います。

誰かがポジショニングでこれを補う方法を理解するのを手伝ってもらえますか-ここにいくつかのコードがあります:

 // Adjust the transformation matrix to account for the position of the container
        var tMatrix:Matrix = _imgContainer.transform.matrix;

        //Offset for container
        tMatrix.translate(this.x,this.y);

        //Offset for bounds centering
        tMatrix.translate(-_imgContainer.width/2,-_imgContainer.height/2);   

       // Compensate for rotation
       // ????

   var result_bitmap:BitmapData = new BitmapData(_maskedImg.width,_maskedImg.height,true,0x00FFFFFF);
   result_bitmap.lock();
   result_bitmap.draw(_maskedImg,tMatrix,null,null,null,true);
   result_bitmap.unlock();

あなたが提供できる助けを前もって感謝します -

b

編集: これを正しく説明していない場合は申し訳ありません。サポートする画像でもう一度試してください。新しいビットマップを描画するためのソースとして使用しているコンテナーに、マスクされたビットマップがあります。このコンテナは、キャプチャする前にユーザーが実行時にスケーリング/回転できます。これを達成するために、描画メソッドにコンテナー マトリックスに基づく変換マトリックスを渡し、tx 値と ty 値を調整してゼロ以外の原点 (センタリングによる) を考慮します。この時点までは問題なく動作し、私が期待するものをキャプチャします.

ただし、このコンテナが回転すると、キャプチャの POSITION が再びオフになります。これは、寸法の変更が原因であると考えられます。したがって、コンテナの新しい寸法に対して tx/ty オフセットが正しくなくなります。これを補う必要があるだけですが、方法がわかりません。

誰でも役立つ変換マトリックスの経験がありますか?? ありがとうございます!

imgur.comが主催

imgur.comが主催

4

4 に答える 4

1

同様の問題を伴う可能性のある人のための参考までに。変換行列の値を明示的に設定し、この特定の順序スケールで回転してから平行移動することで、問題を解決しました。

これは、コンテナから変換行列をコピーする代わりでした。だから代わりに

var tMatrix:Matrix = _imgContainer.transform.matrix;

私はこの順序で直接値を設定しています:

tMatrix.scale (_imgContainer.scaleX, _imgContainer.scaleY);
tMatrix.rotate (_imgContainer.rotation * (Math.PI/180));
tMatrix.translate (_imgContainer.x, _imgContainer.y);

努力してくれてありがとう-

b

于 2010-01-29T22:17:54.123 に答える
0

あなたが何をしようとしているのか100%把握していませんが、適用した回転が変換行列を適用するときに使用する必要があるtx / tyを変更しているという基本的な問題があります。

これに基づいて、おそらくこれが役立ちます: http://www.senocular.com/flash/tutorials/transformmatrix/「変換行列の操作」のセクション、特に deltaTransformPoint で変換値を無視することに関する部分を見てください。これは AS2 ですが、うまくいけば、原則によって正しい軌道に乗ることができます。

于 2010-01-29T10:08:31.983 に答える
0

ビットマップがコンテナー内に含まれている場合、コンテナーに適用される変換は、コンテナー内に含まれるものにも適用される必要があります。

ビットマップには変換を適用せず、コンテナーだけに適用します。

于 2010-01-28T00:23:24.993 に答える
0

あなたの質問を完全に理解できたかどうかはわかりませんが、100x200 のオブジェクトを 90 度回転すると、幅と高さが 200x100 になることは何の価値もありません。

これを回避する方法はいくつかありますが、私は通常、回転の影響を受けない scaleX/scaleY を使用し、それらにクリップの元の幅/高さを掛けます。

于 2010-01-28T08:35:30.103 に答える