6

次のように歪ませたいAS3ビットマップ画像があります。

画像の下部のみを歪ませ、上部はそのままにしておきたいと思います。これまでに行った調査に基づいて、Matrix3D クラスを使用したいようですが、効果的に実装する方法がよくわかりません。

以下の回答のおかげで、この記事は 3x3 マトリックスで Matrix3D クラスを理解するための優れたリソースです : http://www.senocular.com/flash/tutorials/transformmatrix/上の画像を歪める機能。私が探しているのは、4x4 マトリックスの使用方法に関する同様のチュートリアルです。私が知りたいのは、行列のどこに数値を配置するかだけで、他のすべてを把握できるはずです。

これが私が得たもののコード例です:

var tempLoader:Loader=new Loader();
var tempBitmap:Bitmap;
var fattenTheBottom:Number;
tempLoader.load(new URLRequest("image.png"));
tempLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,castBitmap);
function castBitmap(e:Event):void
{
    tempLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE,castBitmap);
    tempBitmap = Bitmap(tempLoader.content);
    // Make the image into a trapezoid here using fattenTheBottom
    addChild(tempBitmap);
}

アドバイスをいただければ幸いです。

4

2 に答える 2

4

Matrix3D をすばやく使用する方法が必要な場合は、使用する値の種類の例を次に示します。

var m3d:Matrix3D = new Matrix3D(Vector.<Number>([
    1, 0,    0,    0, 
    0, 1.15, 0.25, 0.00005,
    0, 0,    1,    0,
    0, 0,    0,    1
]));
tempBitmap.transform.matrix3D = m3d;

しかし、すぐに、このアプローチではイメージが望ましくない形で歪んでしまうことに気付くでしょう。たとえば、(必要に応じて) 画像の片側を水平方向に圧縮しますが、画像の内容は垂直方向にも引き伸ばされます。説明するのは難しいですが、上記の方法を試してみると、画像が縦に引き伸ばされていることに気付くでしょう。

、 、 とrotationX組み合わせて使用​​しても同様の効果が得られます。PerspectiveProjectionscaleY

コードと画像の両方の結果でより洗練されたソリューションが必要な場合は、DistortImageを試してください。この方法は簡単ではありませんが (サブイメージのメッシュを使用します)、すばらしい結果が得られます。

于 2012-07-15T12:14:05.777 に答える
2

これについて私が見つけた最高の情報だけを読むことをお勧めします:
変換マトリックスの理解

これを読めば、変換行列のすべてが本当に理解できると思います。これは Flash 8(AS2) のものですが、理論的な情報は AS3 を使用しても同様に役立ちます。

于 2012-06-29T02:23:29.647 に答える