import flash.display.BitmapData; import flash.geom.Matrix; class com.quasimondo.tools.MaskImage extends MovieClip { private var imageHolder:MovieClip; private var maskHolder:MovieClip; public var image:BitmapData; private var callbackObj:Object; private var callback:String; private var baseScale:Number; public var baseHeight:Number; public var baseWidth:Number; public var index:Number; function MaskImage() { imageHolder = createEmptyMovieClip("imageHolder",0); maskHolder = createEmptyMovieClip("maskHolder",1); _visible = false; } public function load( imageURL:String, maskURL:String, _baseScale:Number, _callbackObj:Object, _callback:String ):Void { callbackObj = _callbackObj; callback = _callback; baseScale = _baseScale; imageHolder.loadMovie( imageURL ); maskHolder.loadMovie( maskURL ); onEnterFrame = watchProgress; } private function watchProgress():Void { if ( imageHolder.getBytesLoaded() > 10 && maskHolder.getBytesLoaded() > 10 ){ if ( imageHolder.getBytesLoaded() == imageHolder.getBytesTotal() && maskHolder.getBytesLoaded() == maskHolder.getBytesTotal() && imageHolder._width > 0 && imageHolder._height > 0 && maskHolder._width > 0 && maskHolder._height > 0 ) { onEnterFrame = assembleImage; } } } private function assembleImage():Void { onEnterFrame = null; baseWidth = Math.ceil(baseScale * imageHolder._width); baseHeight = Math.ceil(baseScale * imageHolder._height); image = new BitmapData(baseWidth, baseHeight, true, 0 ); var m:Matrix = new Matrix(baseScale,0,0,baseScale,0,0); var q:String = _quality; _quality = "BEST"; image.draw( imageHolder, m, null, "normal", null, true ); maskHolder.filters = [ new flash.filters.ColorMatrixFilter([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,255])] image.draw( maskHolder, m,null,"alpha",null,true); _quality = q; maskHolder.filters =[]; imageHolder.removeMovieClip(); maskHolder.removeMovieClip(); delete imageHolder; delete maskHolder; attachBitmap( image,0,"auto",true ); callbackObj[callback](this); } }