Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • BitmapData draw()方法

    post by onelong / 2010-4-6 23:12 Tuesday [MXML/ActionScript3.0]

    BitmapData draw()方法 是flash用来捕获原始BitmapData数据的一个方法,具体说明请查看adobe官方帮助!
    下面看看这个例子吧!
    var shp:Shape=new Shape();//定义一个图形实例
    shp.graphics.beginFill(0xFF0000);//填充为红色
    shp.graphics.drawCircle(20,20,20);//图形里面画一个园,圆点(20,20),半径20
    var bmd:BitmapData=new BitmapData(300,300,false,0);//定义一个位图数据
    var bmp:Bitmap=new Bitmap(bmd);//新建一个位图
    addChild(bmp);//把位图加入显示列表

    var matrix:Matrix=new Matrix(1,0,0,1,20,20);
    //Matrix(a,b,c,d,tx,ty),默认值(1,0,0,1,0,0),tx:20函意为针对x轴,复制转译20个位于 X 轴的点

    bmd.draw(shp);//捕获shp的数据

    bmd.draw(bmd.clone(),matrix);

    //    利用Matrix,针对bmd位图资料透过Matrix作tx:20的复制转移绘制,因为这样的动作会造bmd
    //位图资料的变更,引起己加入显示列表bmp容器内的BitmapData显示资料作同步更新,所以会于
    //荧幕更新时进行重新绘制,而draw函数又将透过Matrix变更后的bmd资料对自身进行绘制,再度
    //造成bmd内部资料的更动.再次引发bmp于荧幕重新显示时进行绘制.

    // 所以一般不会对bmd内容进行Matrix转换后又将其绘制至自身的bmd.
    // 写法应该是 bmd.draw(shp,matrix);

    //bmd.draw(bmd.clone(),matrix);
    //因为透过bmd.clone()将bmd位图资料复制一份出来,然后再透过Matrix进行处理,此时原来bmd
    //的位图资料不会变更.

    当然这是一个很简单的例子;draw()方法还可以捕获很多display对象的,如视频,影片剪辑等,通过draw()方法,你可以简单的实现图片切割,摄像头拍照等等功能
     

    
    package {
    	import flash.display.Bitmap;
    	import flash.display.BitmapData;
    	import flash.display.Sprite;
    	import flash.display.StageAlign;
    	import flash.display.StageScaleMode;
    	import flash.events.*;
    	import flash.geom.Matrix;
    	import flash.media.Camera;
    	import flash.media.Video;
    	import flash.net.FileReference;
    	import flash.net.URLRequest;
    	import flash.net.URLRequestHeader;
    	import flash.net.URLRequestMethod;
    	import flash.net.navigateToURL;
    	import flash.system.JPEGLoaderContext;
    	import flash.system.Security;
    	import flash.system.SecurityPanel;
    	import flash.utils.ByteArray;
    	
    	public class Test extends Sprite {
    		private var video:Video;
    		private var bmd:BitmapData;
    		private var camera:Camera;
    		
    		public function Test() {
    			stage.scaleMode = StageScaleMode.NO_SCALE;
    			stage.align = StageAlign.TOP_LEFT;
    			
    			 camera= Camera.getCamera();
    			//Security.showSettings(SecurityPanel.CAMERA);
    			
    			if (camera1 != null) {
    				camera.setMode(640,480,15);
    				camera.addEventListener
                                    (ActivityEvent.ACTIVITY, activityHandler);
    				video = new Video(camera.width, camera.height);
    				video.attachCamera(camera1);
    				addChild(video);
    				video.x=640;
    				video.y=500;
    				video.rotationY=180;
    				bmd=new BitmapData(640,480,false);
    				var pic:Bitmap=new Bitmap(bmd);
    								this.addChild(pic);
    				stage.addEventListener(MouseEvent.CLICK,onClick);
    			} else {
    				trace("You need a camera.");
    			}
    		}
    		
    		private function activityHandler(event:ActivityEvent):void {
    			trace("activityHandler: " + event);
    		}
    		private function onClick(event:MouseEvent):void {
    			var matix:Matrix=new Matrix(-1,0,0,1,bmd.width,0);
    			bmd.draw(video,matix);
    		}
    	}
    }
    
    好了!其他的也不多说了!好好体验一下吧
    

    引用地址:
     

    我要评论