视照果
2010-03-25 20:30 宝宝合凤凰 阅读(341) 评论(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
浙公网安备 33010602011771号