视照果
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