ActionScript 3.0 で、ディスプレイオブジェクトからBitmapDataを取得するには?
インスタンス化したMovieClipなどのDisplayObjectからBitmapDataを取得するには、draw (BitmapData.draw メソッド)を使用する。 その際、matrixにDisplayObjectのスケール情報を渡すことで、変形後のBitmapDataを得ることが出来る。
flash on 2013-11-21 - wonderfl build flash online
package { import flash.display.Bitmap; import flash.geom.Matrix; import flash.display.BitmapData; import flash.display.MovieClip; import flash.display.Sprite; public class FlashTest extends Sprite { public function FlashTest() { //DisplayObject を作成 var _mc:MovieClip = new MovieClip(); _mc.graphics.beginFill(0xFF0000); _mc.graphics.drawRect(0,0,24,24); _mc.graphics.endFill(); //[1]テストのためスケールを2倍にする _mc.scaleX = 2; _mc.scaleY = 2; //DisplayObject と同じサイズの BitmapData を作成 //ビットマップデータ1 var _bitmapData1:BitmapData = new BitmapData(_mc.width,_mc.height,false); //ビットマップデータ2 var _bitmapData2:BitmapData = new BitmapData(_mc.width,_mc.height,false); //DisplayObject のスケール情報を取得 var _matrix:Matrix = new Matrix(); _matrix.scale(_mc.scaleX,_mc.scaleY); //BitmapData に書き込み //[2]ビットマップデータ1はそのまま _bitmapData1.draw(_mc); //[3]ビットマップデータ2には、Matrixを渡す _bitmapData2.draw(_mc,_matrix); //[4]ビットマップデータ1の方は、[1]のスケールが反映されず作成時の DisplayObject のサイズのまま var bitmap1:Bitmap = new Bitmap(_bitmapData1); this.addChild(bitmap1); //[5]ビットマップデータ2の方は、[1]のスケールが反映され2倍の大きさで表示される var bitmap2:Bitmap = new Bitmap(_bitmapData2); bitmap2.x = 48;//位置調整 this.addChild(bitmap2); } } }