feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS2、AS3で、MovieClipの一部だけをキャプチャする

AS2、AS3で、MovieClipの一部だけをキャプチャする

AS2、AS3共にMovieClipをBitmapDataとしてキャプチャするには、BitmapData.drawを使用します。そのとき、たとえばx座標50px、y座標50pxの位置から縦横100pxだけというように、一部だけ切り取ったようにキャプチャする方法のメモです。

(昔に書き残してあったテキストファイルを発掘したので、手直しして公開)


というわけで、mcというMovieClipから、座標(50, 50)から高さと幅が100pxの矩形の中を切り取ります。


■ Action Script 2.0

まずは、AS2のコードから。

//BitmapDataと、Rectangle、MatrixはFlash Player 8からサポートだからか、importしないといけない
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Matrix;
 
//カンバスとなる空のBitmapDataを作成。
//最終的に出来るBitmapDataが100px×100pxなので引数は100, 100
var bmd:BitmapData = new BitmapData(100, 100);	
 
//BitmapDataを格納するための、空のMovieClipを作成
var bm:MovieClip = this.createEmptyMovieClip("bm", this.getNextHighestDepth());
 
//BitmapDataをアタッチ
bm.attachBitmap(bmd, this.getNextHighestDepth());
 
//mcをキャプチャ。今回肝になるのはMatrixとRectangle
bmd.draw(mc, new Matrix(1, 0, 0, 1, -50, -50), null, "normal", new Rectangle(0, 0, 100, 100), false);

まず、MatrixでMovieClipを変形(移動)します。今回、座標(50, 50)の位置からキャプチャしたいので、MovieClipのx座標を-50、y座標を-50すれば、座標(0, 0)の位置からキャプチャすればいいということになります。

new Matrix(1, 0, 0, 1, -50, -50)

次にRectangleで、Bitmapを切り取る部分を指定。座標(0, 0)から高さと幅が100px。こうすることで、キャプチャされたBitmapDataは、一番最初に作成したカンバスとなるBitmapDataの座標(0, 0)の位置に作られます。

キャプチャ例。BitmapData.drawメソッドの、MatrixとRectangleの引数が肝にになる

Matrixの部分は何も指定せずnew Matrix()にしておいて、new Rectangle(50, 50, 100, 100)とすると、キャプチャされたデータは、カンバス用のBitmapDataの座標(50, 50)の位置に貼り付けられてしまい、画像が途中で切れてしまいます。


■ Action Script 3.0

やってることは、ほぼ一緒です。

//カンバスとなる空のBitmapDataを作成
var bmd:BitmapData = new BitmapData(100, 100);
 
//mcをキャプチャ。
bmd.draw(mc, new Matrix(1, 0, 0, 1, -50, -50), null, "normal", new Rectangle(0, 0, 100, 100));
 
//BitmapDataを表示用のコンテナ、Bitmapに格納。
var bm:Bitmap = new Bitmap(bmd);
 
//ステージに表示
addChild(bm);

BitmapDataの部分は、まんま一緒でした。

Tweet Share Bookmark

Navigation

prev: USB加湿器
next: AS2、AS3のFileReferenceクラスを使って、オリジナルダウンローダーを作る

Recently Entries