主要用到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();
}
}
}
本文介绍如何利用ActionScript 3.0中的BitmapData类及其draw()方法实现图片的裁剪功能。通过实例展示了裁剪区域的选择、图片的加载及裁剪后的图片保存等过程。
194

被折叠的 条评论
为什么被折叠?



