BitmapData抠图小实验


先看看效果:
 
代码如下:
package {
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.geom.*;
import flash.filters.*;
/**
  * @author CYPL
  * 设置图片元件实例名为Image
  */
public class CutImageTest extends Sprite {
  private var _imageBitmapData : BitmapData;
  private var _imageHotAreaData:BitmapData;
  private var _imageBitmap : Bitmap;
  private var _mouseRectContainer:Sprite;
  private var _mouseRectStartX:Number;
  private var _mouseRectStartY:Number;
  private var _imageClipDraging:Boolean;
  private var _currentDragClip:Sprite;
  public function CutImageTest() {
   
   _mouseRectContainer=new Sprite;
   Image.visible=false;
   _imageBitmapData=new BitmapData(Image.width,Image.height,true,0),_imageBitmapData.draw(Image);
   _imageBitmap=Bitmap(addChild(new Bitmap(_imageBitmapData)))
   _imageBitmap.x=30
   _imageBitmap.y=30
   configMouseEvent();
   //----------hitTestArea------------------------
   var c:ColorTransform=new ColorTransform;
   c.color=0xff0000;
   _imageHotAreaData=_imageBitmapData.clone();
   _imageHotAreaData.draw(_imageHotAreaData,null,c);
  }
  private function configMouseEvent():void {
   stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler,false,0,true);
   stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler,false,0,true);
  }
  /**************************drawRect handler*******************************/
  private function mouseDownHandler(evt:MouseEvent):void {//mouse_down
   if (_imageClipDraging) {
    return;
   }
   addChild(_mouseRectContainer);
   _mouseRectStartX=evt.stageX;
   _mouseRectStartY=evt.stageY;
   stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
  }
  private function mouseUpHandler(evt:MouseEvent):void {//mouse_up
   
   //_currentDragClip&&();
   _imageClipDraging&&(_currentDragClip.stopDrag(),_imageClipDraging=false,_currentDragClip.alpha=1)||(cutImage(checkIntersection()),_mouseRectContainer.graphics.clear(),stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler))
   
  }
  private function mouseMoveHandler(evt:MouseEvent):void {//mouse_move
   evt.updateAfterEvent();
   var minX:Number=Math.min(evt.stageX,_mouseRectStartX)
   var minY:Number=Math.min(evt.stageY,_mouseRectStartY)
   var maxX:Number=Math.max(evt.stageX,_mouseRectStartX)
   var maxY:Number=Math.max(evt.stageY,_mouseRectStartY)
with(_mouseRectContainer.graphics){
   clear();
   lineStyle(0);
   beginFill(0xffff00,.5);
   drawRect(0,0,maxX-minX,maxY-minY);}
   _mouseRectContainer.x=minX;
   _mouseRectContainer.y=minY;
  }
  /************************************************************************/
  /**************************drag  handler*******************************/
  private function clipMouseDownHandler(evt:MouseEvent):void {//mouse_down
   var target:Sprite=evt.target as Sprite;
   _currentDragClip=target;
   _currentDragClip.alpha=.5;
   _imageClipDraging=true;
   addChild(target);
   _currentDragClip.startDrag(false);
  }
  /************************************************************************/
  private function checkIntersection():Rectangle {
本文转自:http://www.5uflash.com/flashjiaocheng/Flashaschengxu/3009.html

你可能感兴趣的:(C++,c,C#,Flash,UP)