forked from: flash on 2010-11-15

by bkzen forked from flash on 2010-11-15 (diff: 42)
♥0 | Line 74 | Modified 2010-11-15 16:34:12 | MIT License
play

ActionScript3 source code

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

// forked from bkzen's flash on 2010-11-15
package  
{
    import com.bit101.components.Label;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.utils.getTimer;
    import com.actionscriptbible.Example;
    
    /**
     * 
     */
    public class Test2 extends Example
    {
        private var cache:BitmapData;
        private var cnt:int;
        private var bmd:BitmapData;
        private var alphaBmd:BitmapData;
        
        public function Test2() 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e: Event = null): void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            //
            var label: Label = new Label(null, 0, 0, "test");
            label.draw();
            bmd = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0);
            cache = new BitmapData(label.width << 2, label.height << 2, true, 0);
            cache.draw(label, new Matrix(4, 0, 0, 4));
            alphaBmd = new BitmapData(cache.width, cache.height, true, 0xFF000000);
            alphaBmd.lock();
            var bmp:Bitmap;
            addChild(bmp = new Bitmap(bmd));
            
            cnt = 0;
            var i: int, n: int = 1000, t: int, p: Point = new Point(), colorTf: ColorTransform = new ColorTransform();
            t = getTimer();
            bmd.lock();
            for (i = 0; i < n; i ++)
            {
                bmd.fillRect(bmd.rect, 0);
                bmd.copyPixels(cache, cache.rect, p, null, null, true);
            }
            bmd.unlock();
            trace(getTimer() - t);
            cnt = 0;
            t = getTimer();
            bmd.lock();
            for (i = 0; i < n; i ++)
            {
                cnt = (cnt + 1) % 45;
                bmd.fillRect(bmd.rect, 0);
                alphaBmd.fillRect(alphaBmd.rect, (cnt / 45 * 0xFF & 0xFF) << 0x18);
                bmd.copyPixels(cache, cache.rect, p, alphaBmd, p, true);
            }
            bmd.unlock();
            trace(getTimer() - t);
            cnt = 0;
            t = getTimer();
            bmd.lock();
            for (i = 0; i < n; i ++)
            {
                cnt = (cnt + 1) % 45;
                bmd.fillRect(bmd.rect, 0);
                colorTf.alphaMultiplier = cnt / 45;
                bmd.draw(cache, null, colorTf, null, null, true);
            }
            bmd.unlock();
            trace(getTimer() - t);
            removeChild(bmp);
        }
        
    }

}