package { import com.formatlos.as3.lib.display.BitmapDataUnlimited; import com.formatlos.as3.lib.display.events.BitmapDataUnlimitedEvent; import flash.display.Bitmap; import flash.display.Shape; import flash.display.Sprite; import flash.display.StageScaleMode; import flash.geom.ColorTransform; /** * @author Martin Raedlinger (mr@formatlos.de) * * use "-use-network=false" in your compiler settings */ [SWF(width="500", height="500", frameRate="33", backgroundColor="#CCCCCC")] public class DrawHugeSprite extends Sprite { private var _canvas:Shape; private var _bdu:BitmapDataUnlimited; public function DrawHugeSprite() { stage.scaleMode = StageScaleMode.NO_SCALE; var w:int = stage.stageWidth*10; var h:int = stage.stageHeight*10; _canvas = new Shape(); addChild(_canvas); for( var i : Number = 0;i < 1000; i++ ) { _canvas.graphics.beginFill(0, 1); _canvas.graphics.drawCircle(( w ) * Math.random(), ( h ) * Math.random(), 10); _canvas.graphics.endFill(); } _canvas.scaleY = _canvas.scaleX = 0.1; _bdu = new BitmapDataUnlimited(); _bdu.addEventListener(BitmapDataUnlimitedEvent.COMPLETE, onBmpReady); _bdu.addEventListener(BitmapDataUnlimitedEvent.ERROR, onBmpError); _bdu.create( w, h, true); } private function onBmpReady(event : BitmapDataUnlimitedEvent):void { _bdu.bitmapData; _bdu.draw(_canvas, getColorTransform(0xff0000), null, null, true); // add snapshot to stage var bitmap : Bitmap = new Bitmap(_bdu.bitmapData); bitmap.scaleX = bitmap.scaleY = _canvas.scaleX; addChild(bitmap); } private function onBmpError(event : BitmapDataUnlimitedEvent) : void { trace("ERROR"); } private function getColorTransform(rgb_:int):ColorTransform { var red:int = rgb_ >> 16; var green:int = rgb_ >> 8 & 0xFF; var blue:int = rgb_ & 0xFF; return new ColorTransform(0, 0, 0, 1, red, green, blue, 0); } } }