<?xml version="1.0" encoding="utf-8"?>
<!--
/*==============================================================================
*
* CopyRight(c)2008 Qizhi Zhang
* Blog: www.moorwind.com
*
*===============================================================================*/
-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="vertical" horizontalAlign="left" paddingLeft="0" paddingTop="0"
    width="500" height="279" backgroundColor="#FFFFFF"
    initialize="this.init();" viewSourceURL="srcview/index.html">
    <mx:Script>
        <![CDATA[
            import com.moorwind.imageprocesser.edit.CutImage;
            import com.moorwind.imageprocesser.utils.SelectRectangle;
            private const IMAGE_URL:String = "http://farm3.static.flickr.com/2361/2486804592_14bef9e8d6_o.jpg";
            private var loader:Loader;
            private var bmp:Bitmap;
            private var stream:URLStream;
            
            private var selectRectLayer:Sprite;
            private var selectRect:SelectRectangle;
            
            //
            //image loading
            //            
            private function init():void
            {
                this.loader = new Loader();
                this.stream = new URLStream();
                this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE,this.onComplete);
                //this.loader.load(new URLRequest(this.IMAGE_URL));
                this.stream.load(new URLRequest(this.IMAGE_URL));
                this.stream.addEventListener(Event.COMPLETE,this.onLoaded);
                
                this.selectRectLayer = new Sprite();
                this.canvas.rawChildren.addChild(this.selectRectLayer);
                
                this.selectRect = new SelectRectangle(this.canvas,this.selectRectLayer);
            }
            
            private function onLoaded(e:Event):void
            {                                
                var bytearray:ByteArray = new ByteArray();    
                this.stream.readBytes(bytearray);
                
                if(this.stream.connected)
                    this.stream.close();
                    
                this.loader.loadBytes(bytearray);
            }
            
            private function onComplete(e:Event):void
            {
                try
                {
                    this.bmp = this.loader.content as Bitmap;
                }
                catch(e:Error)
                {
                    
                }
                this.canvas.rawChildren.addChild(this.bmp);
                this.refershLayer();
            }
            
            private function refershLayer():void
            {
                this.canvas.rawChildren.setChildIndex(this.selectRectLayer, this.canvas.rawChildren.numChildren - 1)
            }
            
            //
            //image select and cut
            //
            private function startSelect():void
            {
                //start creat a select area for cutting, data return as SelectRect.selectRectangle.
                this.selectRect.InitSelectRectangle()
            }
            
            private function cutImage():void
            {                
                this.canvas.rawChildren.removeChild(this.bmp);
                //Cut bmp data by given rectangle. new bmp will be returned.
                this.bmp = CutImage.Cut(this.bmp,this.selectRect.selectRectangle);
                this.canvas.rawChildren.addChild(this.bmp);
                this.refershLayer();
                this.cancelSelect();
            }
            
            private function cancelSelect():void
            {
                this.selectRect.Cancel();
            }
        ]]>
    </mx:Script>
    <mx:HBox>
        <mx:Button label="剪裁" click="this.startSelect();"/>
        <mx:Button label="确定" click="this.cutImage();" />
        <mx:Button label="取消" click="this.cancelSelect();"/>
    </mx:HBox>
    
    <mx:Canvas id="canvas"/>
</mx:Application>