代码改变世界

视照果

2010-03-25 20:30  宝宝合凤凰  阅读(333)  评论(0编辑  收藏  举报
AvatarEdit.fla里的代码:
import org.nwhy.AvatarEdit.*;
import gs.TweenLite;
/*-------------------------------------
*参数设置
*/
var camera:Camera = Camera.getCamera();
var camWidth:uint=320;
var camHeight:uint=240;
var camFlag:Boolean=false;
var video:Video = new Video();
var videoOffset=7;
var smallImgWidth:uint=50;
var midImgWidth:uint=100;
var bigImgWidth:uint=150;
var imgScale:Number=1;
/*-------------------------------------
*mc声明
*/
var tf_msg:TextField=new TextField();
var tf_error:TextField=new TextField();
var mc_imageThumb:Sprite=new Sprite();
var mc_cameraRecord:Sprite=new Sprite();
var mc_preview:Sprite=new Sprite();
var btn_preview:FButton = new FButton("预 览");
var btn_save:FButton = new FButton("保 存");
var bd_avatar:BitmapData;
/*-------------------------------------
*函数部分
*/
function init() {
	getCamera();
	initStage();
	initListener();
}
function initStage() {
	stage.align=StageAlign.TOP_LEFT;
	stage.scaleMode=StageScaleMode.NO_SCALE;
	var tft:TextFormat=new TextFormat();
	tft.size=22;
	tf_msg.defaultTextFormat=tft;
	tf_msg.x=28;
	tf_msg.y = 100;
	tf_msg.selectable=false;
	tf_msg.width=300;
	tf_msg.wordWrap =true;
	tf_msg.autoSize=TextFieldAutoSize.LEFT;
	tf_msg.textColor=0xff0000;
	addChild(tf_msg);
	tf_error.x=343;
	tf_error.y = 285;
	tf_error.selectable=false;
	tf_error.width=150;
	tf_error.wordWrap =true;
	tf_error.autoSize=TextFieldAutoSize.LEFT;
	tf_error.textColor=0xff0000;
	addChild(tf_error);
	mc_imageThumb.x=339;
	mc_imageThumb.y=10;
	mc_imageThumb.name="mc_imageThumb";
	addChild(mc_imageThumb);
	addChild(mc_cameraRecord);
	mc_preview.x=videoOffset+3;
	mc_preview.y=288;
	addChild(mc_preview);
	var dragbox:DragBox=new DragBox(new Rectangle(videoOffset,videoOffset,camWidth,camHeight),smallImgWidth,bigImgWidth,imgScale,videoOffset);
	dragbox.x=video.x+(video.width-dragbox.width)/2;
	dragbox.y=video.y+(video.height-dragbox.height)/2;
	addChild(dragbox);
	btn_preview.x = 337;
	btn_preview.y = 235;
	btn_preview.alpha=0.5;
	addChild(btn_preview);
	btn_save.x=420;
	btn_save.y=235;
	btn_save.alpha=0.5;
	addChild(btn_save);
}
function getCamera() {
	if (camera != null) {
		camera.addEventListener(StatusEvent.STATUS, cameraStatusHandler);
		video.name="video";
		video.attachCamera(camera);
		video.x=video.y=videoOffset;
		addChild(video);
	} else {
		showMsg(tf_msg,"您的电脑上没有安装摄像头,请使用其他方式验证.");
	}
}
function cameraStatusHandler(_e:StatusEvent):void {
	if (camera.muted) {
		showMsg(tf_msg,"您限制对摄像头的访问,So,系统无法连接到摄像头.");
	} else {
		camFlag=true;
		showMsg(tf_msg,"");
	}
}
function initListener() {
	btn_preview.addEventListener(MouseEvent.CLICK,previewAvatar);
	btn_preview.addEventListener(MouseEvent.MOUSE_OVER,btnMouseOver);
	btn_preview.addEventListener(MouseEvent.MOUSE_OUT,btnMouseOut);
	btn_save.addEventListener(MouseEvent.CLICK,saveAvatar);
	btn_save.addEventListener(MouseEvent.MOUSE_OVER,btnMouseOver);
	btn_save.addEventListener(MouseEvent.MOUSE_OUT,btnMouseOut);
}
function previewAvatar(_e:MouseEvent) {
	if (camFlag) {
		if (mc_imageThumb.numChildren>0) {
			removeChildren(mc_preview);
			bd_avatar=Bitmap(mc_imageThumb.getChildAt(0)).bitmapData.clone();
			var bm_big:Bitmap=new Bitmap(bd_avatar);
			bm_big.width=bigImgWidth;
			bm_big.height=bigImgWidth*imgScale;
			mc_preview.addChild(bm_big);
			var bm_mid:Bitmap=new Bitmap(bd_avatar);
			bm_mid.width=midImgWidth;
			bm_mid.height=midImgWidth*imgScale;
			bm_mid.x=bigImgWidth+10;
			mc_preview.addChild(bm_mid);
			var bm_small:Bitmap=new Bitmap(bd_avatar);
			bm_small.x=bm_mid.x+midImgWidth+10;
			bm_small.width=smallImgWidth;
			bm_small.height=smallImgWidth*imgScale;
			mc_preview.addChild(bm_small);
			showMsg(tf_error,"要保存不? 不保存吧? 还是保存吧? 到底要不要保存呢?");
		} else {
			showMsg(tf_error,"米有图像呀么米有头像~");
		}
	} else {
		trace("无法连接到摄像头");
	}
}
function saveAvatar(_e:MouseEvent) {
	if (camFlag) {
		if (mc_preview.numChildren>0) {
			var avatarData:String;
			var bigImgHeight=bigImgWidth*imgScale;
			for (var i:uint = 0; i<bigimgwidth ; i++) {
				for (var j = 0; j<bigImgHeight; j++) {
					avatarData += bd_avatar.getPixel(i, j).toString(16);
					if (!(i == bigImgWidth-1 && j == bigImgHeight-1)) {
						avatarData += ',';
					}
				}
			}
			//保存头像操作,这里是调用js函数,爱咋咋滴
			//ExternalInterface.call(savaAvatar,{avatarW:bigImgWidth,avatarH:bigImgWidth*imgScale,avatarData:avatarData});
		} else {
			showMsg(tf_error,"米有图像呀么咋么保存?");
		}
	}
}
function btnMouseOver(_e:MouseEvent) {
	TweenLite.to(_e.currentTarget,0.2,{alpha:1});
}
function btnMouseOut(_e:MouseEvent) {
	TweenLite.to(_e.currentTarget,0.2,{alpha:0.5});
}
function showMsg(_tf:TextField,_str:String="") {
	_tf.text=_str;
}
function removeChildren(dObj:DisplayObjectContainer) {
	while (dObj.numChildren>0) {
		dObj.removeChildAt(0);
	}
}
init();

DragBox类代码,DragBox.as:

package org.nwhy.AvatarEdit{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.ui.Mouse;

	public class DragBox extends Sprite {
		private var gripperMinWidth:Number;//拖动框最小值
		private var gripperMaxWidth:Number;//拖动框最大值
		private var resizeFlag:Boolean = false;//是否可以resize
		private var originalScale:Number;//窗体的高宽比
		private var dragBoundary:Rectangle;//可以拖动的范围
		private var dragOffset:Number;//dragbox窗体的偏移量
		private var mc_cursor:Cursor=new Cursor();//鼠标样式
		private var mc_imageThumb:Sprite=new Sprite();//缩略图
		public function DragBox(rect:Rectangle,minWidth:uint = 75, maxWidth:uint=200,scale:Number=1,offset:Number=0) {
			this.gripperMinWidth = minWidth;
			this.gripperMaxWidth = maxWidth;
			this.originalScale = scale;
			this.dragBoundary = rect;
			this.dragOffset=offset;
			this.addEventListener(Event.ADDED_TO_STAGE, onStage);
		}
		private function onStage(_e:Event):void {
			this.removeEventListener(Event.ADDED_TO_STAGE, onStage);
			initStage();
			initListeners();
		}
		private function initStage() {
			this.alpha=0.3;
			mc_imageThumb=Sprite(parent.getChildByName("mc_imageThumb"));
			addChild(mc_cursor);
			mc_cursor.visible=false;
		}
		//绘制边框
		private function drawBorder():void {
			this.graphics.clear();
			this.graphics.beginFill(0, 0);
			this.graphics.lineStyle(1, 0x111111);
			this.graphics.drawRect(0, 0, mc_gripper.width, mc_gripper.height);
			this.graphics.endFill();
		}
		//添加侦听器
		private function initListeners():void {
			stage.addEventListener(MouseEvent.MOUSE_UP, onDragBoxMouseUp);
			mc_gripper.addEventListener(MouseEvent.MOUSE_OVER, onRectMouseOver);
			mc_gripper.addEventListener(MouseEvent.MOUSE_OUT, onRectMouseOut);
			mc_gripper.addEventListener(MouseEvent.MOUSE_DOWN, onRectDown);
			mc_gripper.addEventListener(MouseEvent.MOUSE_UP, onRectUp);
			mc_corner.addEventListener(MouseEvent.MOUSE_OVER, onCornerOver);
			mc_corner.addEventListener(MouseEvent.MOUSE_DOWN, onCornerDown);
			mc_corner.addEventListener(MouseEvent.MOUSE_UP, onCornerUp);
		}
		private function onDragBoxMouseUp(_e:MouseEvent) {
			resizeFlag=false;
			mc_gripper.stopDrag();
			mc_corner.stopDrag();
		}
		private function onRectMouseOver(_e:MouseEvent) {
			Mouse.hide();
			mc_cursor.visible=true;
			mouseFollow();
			this.addEventListener(MouseEvent.MOUSE_MOVE, onBgMouseMove);
		}
		public function onBgMouseMove(_e:MouseEvent) {
			mouseFollow();
			_e.updateAfterEvent();
		}
		private function mouseFollow() {
			mc_cursor.x=mouseX;
			mc_cursor.y=mouseY;
		}
		private function onRectMouseOut(_e:MouseEvent) {
			Mouse.show();
			mc_cursor.visible=false;
		}
		private function onRectDown(_e:MouseEvent) {
			this.startDrag(false,new Rectangle(dragBoundary.x, dragBoundary.y, dragBoundary.width - mc_gripper.width, dragBoundary.height - mc_gripper.height));
		}
		private function onRectUp(_e:MouseEvent) {
			createBitmap(parent.getChildByName("video"),mc_gripper);
			this.stopDrag();
		}
		private function onCornerOver(_e:MouseEvent) {
			Mouse.show();
			mc_cursor.visible=false;
		}
		private function onCornerDown(_e:MouseEvent) {
			resizeFlag=true;
			mc_corner.addEventListener(MouseEvent.MOUSE_MOVE, onCornerMove);
		}
		private function onCornerUp(_e:MouseEvent) {
			mc_corner.stopDrag();
			mc_corner.x=mc_gripper.width-mc_corner.width;
			mc_corner.y=mc_gripper.height-mc_corner.height;
		}
		private function onCornerMove(_e:MouseEvent) {
			if (resizeFlag) {
				resizeBox();
				drawBorder();
				_e.updateAfterEvent();
			}
		}
		//窗体缩放部分
		private function resizeBox() {
			//开始拖动
			mc_corner.startDrag();
			//设置宽高
			mc_gripper.width=mc_corner.x+mc_corner.width;
			mc_gripper.height=mc_gripper.width*originalScale;
			//设置右下角那个图标的位置
			mc_cornerBg.x=mc_gripper.width-mc_cornerBg.width;
			mc_cornerBg.y=mc_gripper.height-mc_cornerBg.height;
			checkWall();
			drawBorder();
			createBitmap(parent.getChildByName("video"),mc_gripper);
		}
		//边缘检测
		private function checkWall() {
			//宽度小于最小允许宽度时的处理
			if (mc_gripper.width< =gripperMinWidth) {
				mc_gripper.width=gripperMinWidth;
				mc_cornerBg.x=gripperMinWidth-mc_cornerBg.width;
			}
			//宽度大于最大允许宽度时的处理
			if (mc_gripper.width>=gripperMaxWidth) {
				mc_gripper.width=gripperMaxWidth;
				mc_cornerBg.x=gripperMaxWidth-mc_cornerBg.width;
			}
			//高度小于最小允许高度时的处理
			if (mc_gripper.height< =gripperMinWidth*originalScale) {
				mc_gripper.height=gripperMinWidth*originalScale;
				mc_cornerBg.y=gripperMinWidth*originalScale-mc_cornerBg.height;
			}
			//高度大于最大允许高度时的处理
			if (mc_gripper.height>=gripperMaxWidth*originalScale) {
				mc_gripper.height=gripperMaxWidth*originalScale;
				mc_cornerBg.y=gripperMaxWidth*originalScale-mc_cornerBg.width;
			}
			//拖动到dragBoundary范围外的处理
			if (this.x+mc_gripper.width>=(dragBoundary.width+dragOffset) || this.y+mc_gripper.height>=(dragBoundary.height+dragOffset)) {
				var offsetX:Number=this.x+mc_gripper.width-(dragBoundary.width+dragOffset);
				if (offsetX>0) {
					this.x-=offsetX;
					onCornerUp(null);
				}
				var offsetY:Number=this.y+mc_gripper.height-(dragBoundary.height+dragOffset);
				if (offsetY>0) {
					this.y-=offsetY;
					onCornerUp(null);
				}
			}
		}
		//建立bitmap
		private function createBitmap(sp:Object,box:Sprite) {
			removeChildren(mc_imageThumb);
			var jpgSource = new BitmapData(dragBoundary.width,dragBoundary.height);
			jpgSource.draw(sp);
			var pt:Point = new Point(box.x,box.y);
			pt=box.localToGlobal(pt);
			var rect:Rectangle = new Rectangle(pt.x-dragOffset,pt.y-dragOffset,box.width,box.height);//设置复制的大小和起始点
			var jpgOut:BitmapData= new BitmapData(box.width, box.height);
			jpgOut.copyPixels(jpgSource, rect,new Point(0, 0));//复制,并设置复制到的起始点
			var bp:Bitmap = new Bitmap(jpgOut);
			bp.width = gripperMaxWidth;
			bp.height = gripperMaxWidth*originalScale;
			mc_imageThumb.addChild(bp);
		}
		//删除子元件的函数
		private function removeChildren(dObj:DisplayObjectContainer) {
			while (dObj.numChildren>0) {
				dObj.removeChildAt(0);
			}
		}
	}
}

FButton类没什么好说的,就不发了。
没有做文件上传的部分,觉得米必要哈哈。也米有写保存的代码,JS,PHP,JAVA,C#,ect?大家爱咋咋的吧。
有需要的请使用,有问题记得反馈下哈LOL