主要用到BitmapData.draw()方法,其中参数clipRect ,要注意,我研究了半天才才知道。仔细查看代码。
package
{
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.* ;
import flash.display.*;
import flash.geom.* ;
public class Main extends Sprite
{
private var _picx:int = 0 ;
private var _picy:int = 120 ;
private var _picwidth = 0 ;
private var _picheight = 0 ;
private var _bitmapdata:BitmapData ;//原始图像数据
private var _rect:Sprite ;//裁剪区域
public function Main():void{
this.loaderPic("F:/a.jpg");
cut_btn.addEventListener(MouseEvent.MOUSE_DOWN, drawPic);
save_btn.addEventListener(MouseEvent.MOUSE_DOWN, savePic) ;
}
/**
* 保存裁剪图片
* @param e
*/
private function savePic(e:MouseEvent){
//组装裁剪区域,把sprite 转换为Rectangle .
var cutpic:Rectangle = new Rectangle(_rect.x,_rect.y,_rect.width,_rect.height);
//存储新图片信息的数组,参数和原图数组要一致。因为没裁剪区域也占用存储单元
var cutbitmapdata:BitmapData = new BitmapData(_bitmapdata.width, _bitmapdata.height) ;
//裁剪图片
cutbitmapdata.draw(_bitmapdata, null, null, null, cutpic);
var bitmap:Bitmap = new Bitmap(cutbitmapdata) ;
//只显示裁剪区域图片,去除其他空位置
bitmap.scrollRect = cutpic ;
bitmap.x = 100;
bitmap.y = 0 ;
this.addChild(bitmap) ;
}
/****
* 装载图片
* @param picurl
*/
public function loaderPic(picurl:String):void{
if (picurl == null || picurl == "")
{
return ;
}
var request:URLRequest = new URLRequest(picurl);
var loader:Loader = new Loader() ;
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHander);
}
/****
* 装载图片完成之后处理
* @param e
*/
private function completeHander(e:Event):void {
var loader:Loader = e.target.loader as Loader;
this._picwidth = _loader.width ;
this._picheight = _loader.height ;
_bitmapdata= new BitmapData(loader.width, loader.height);
_bitmapdata.draw(_loader);
var _bitmap:Bitmap = new Bitmap(_bitmapdata);
_bitmap.x = this._picx;
_bitmap.y = this._picy ;
this.addChild(_bitmap);
}
/****
* 裁剪区域
* @param e
*/
public function drawPic(e:MouseEvent):void
{
trace(this._picwidth);
_rect= new Sprite () ;
/***设置裁剪区域边框样式*/
_rect.graphics.lineStyle(3, 0xFF0000, 0.5, true, LineScaleMode.NONE, CapsStyle.ROUND);
_rect.graphics.beginFill(0xCCFF00,0);
_rect.graphics.drawRect(this._picx, this._picy, this._picwidth/4,this._picheight/4);
_rect.graphics.endFill();
_rect.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler) ;
_rect.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandle) ;
this.addChild(_rect) ;
}
private function mouseDownHandler(e:MouseEvent):void {
var _rectangle:Rectangle = new Rectangle();
_rectangle.width = _picwidth-_rect.width ;
_rectangle.height = _picheight-_rect.height ;
//trace(_rectangle.x, _rectangle.y);
_rect.startDrag(false,_rectangle);
}
private function mouseUpHandle(e:MouseEvent):void {
_rect.stopDrag();
}
}
}
{
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.* ;
import flash.display.*;
import flash.geom.* ;
public class Main extends Sprite
{
private var _picx:int = 0 ;
private var _picy:int = 120 ;
private var _picwidth = 0 ;
private var _picheight = 0 ;
private var _bitmapdata:BitmapData ;//原始图像数据
private var _rect:Sprite ;//裁剪区域
public function Main():void{
this.loaderPic("F:/a.jpg");
cut_btn.addEventListener(MouseEvent.MOUSE_DOWN, drawPic);
save_btn.addEventListener(MouseEvent.MOUSE_DOWN, savePic) ;
}
/**
* 保存裁剪图片
* @param e
*/
private function savePic(e:MouseEvent){
//组装裁剪区域,把sprite 转换为Rectangle .
var cutpic:Rectangle = new Rectangle(_rect.x,_rect.y,_rect.width,_rect.height);
//存储新图片信息的数组,参数和原图数组要一致。因为没裁剪区域也占用存储单元
var cutbitmapdata:BitmapData = new BitmapData(_bitmapdata.width, _bitmapdata.height) ;
//裁剪图片
cutbitmapdata.draw(_bitmapdata, null, null, null, cutpic);
var bitmap:Bitmap = new Bitmap(cutbitmapdata) ;
//只显示裁剪区域图片,去除其他空位置
bitmap.scrollRect = cutpic ;
bitmap.x = 100;
bitmap.y = 0 ;
this.addChild(bitmap) ;
}
/****
* 装载图片
* @param picurl
*/
public function loaderPic(picurl:String):void{
if (picurl == null || picurl == "")
{
return ;
}
var request:URLRequest = new URLRequest(picurl);
var loader:Loader = new Loader() ;
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHander);
}
/****
* 装载图片完成之后处理
* @param e
*/
private function completeHander(e:Event):void {
var loader:Loader = e.target.loader as Loader;
this._picwidth = _loader.width ;
this._picheight = _loader.height ;
_bitmapdata= new BitmapData(loader.width, loader.height);
_bitmapdata.draw(_loader);
var _bitmap:Bitmap = new Bitmap(_bitmapdata);
_bitmap.x = this._picx;
_bitmap.y = this._picy ;
this.addChild(_bitmap);
}
/****
* 裁剪区域
* @param e
*/
public function drawPic(e:MouseEvent):void
{
trace(this._picwidth);
_rect= new Sprite () ;
/***设置裁剪区域边框样式*/
_rect.graphics.lineStyle(3, 0xFF0000, 0.5, true, LineScaleMode.NONE, CapsStyle.ROUND);
_rect.graphics.beginFill(0xCCFF00,0);
_rect.graphics.drawRect(this._picx, this._picy, this._picwidth/4,this._picheight/4);
_rect.graphics.endFill();
_rect.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler) ;
_rect.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandle) ;
this.addChild(_rect) ;
}
private function mouseDownHandler(e:MouseEvent):void {
var _rectangle:Rectangle = new Rectangle();
_rectangle.width = _picwidth-_rect.width ;
_rectangle.height = _picheight-_rect.height ;
//trace(_rectangle.x, _rectangle.y);
_rect.startDrag(false,_rectangle);
}
private function mouseUpHandle(e:MouseEvent):void {
_rect.stopDrag();
}
}
}