先看看效果:
代码如下:
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
代码如下:
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