ネコガネ:メモ帳

Adobe Flash & AIR、Action Script 関連とゲーム制作に関するメモ。

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);

        }
    }
}