flash on 2013-11-21

by necogane
インスタンス化したMovieClipなどのDisplayObjectからBitmapDataを取得するには、BitmapData.draw メソッドを使用する。
その際、matrixにDisplayObjectのスケール情報を渡すことで、変形後のBitmapDataを得ることが出来る。
♥0 | Line 28 | Modified 2013-11-21 10:39:22 | MIT License
play

ActionScript3 source code

/**
 * Copyright necogane ( http://wonderfl.net/user/necogane )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/1fj9
 */

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

        }
    }
}