在Flash AS3中从网络摄像头拍摄当前图像

时间:2012-06-05 18:03:52

标签: image actionscript-3 flash webcam

所以我设法使用以下代码在AS3应用中查看我的网络摄像头:

package{
    import flash.display.Sprite;
    import flash.media.Camera;
    import flash.media.Video;

    public class WebCam extends Sprite
    {   
        private var camara:Camera;
        private var video:Video;

        public function WebCam():void {
            setupCamera();
        }

        private function setupCamera():void
        {
            video = new Video(640, 480);
            camara = Camera.getCamera();
            camara.setMode(640, 480, 30);
            video.attachCamera(camara);
            addChild(video);
        }

    }

}

但我想知道是否还有从网络摄像头拍摄当前图像的照片并将其保存在本地某处?

编辑:

@Sean这是我目前的代码:

var camara;
var video;


//Get the camera reference.
camara = Camera.getCamera();


//Create a video instance
video = new Video(640, 480);


video.attachCamera(camara);

addChild(video);

var bitmapData:BitmapData = new BitmapData(640, 480);
bitmapData.draw(video);

var encoder:JPGEncoder = new JPGEncoder();
var byteArray:ByteArray = encoder.encode(bitmapData);

navnavClick.addEventListener(MouseEvent.CLICK,function(){
var fileReference:FileReference = new FileReference();
fileReference.save(byteArray);
});

一切正常,但输出图像只是一张空白(白色)图像。我也包括了JPGEncoder类。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

首先,您需要将图像绘制为BitmapData

var bitmapData:BitmapData = new BitmapData(640, 480);
bitmapData.draw(video);

然后,您需要对BitmapData进行编码。我建议使用Alchemy的编码器,但Adobe正在从Flash Player中删除它。因此,您应该使用较慢的as3corelib JPGEncoder

var encoder:JPGEncoder = new JPGEncoder();
var byteArray:ByteArray = encoder.encode(bitmapData);

您现在拥有图像文件的原始字节,并可以将它们写入磁盘。

var fileReference:FileReference = new FileReference();
fileReference.save(byteArray);

(必须从用户启动的操作中调用此部分,如点击)。

答案 1 :(得分:0)

好吧,试试这段代码,我用它并且工作正常:

var cam:Camera = Camera.getCamera();
cam.setMode(stage.stageWidth,stage.stageHeight,30);
var video_es = new Video(cam.width, cam.height);
video_es.attachCamera(cam); 
stage.addEventListener(MouseEvent.CLICK, snapIt); 
var screenS:BitmapData = new BitmapData(cam.width, cam.height); 
addChild(video_es);

function snapIt(e:MouseEvent):void { 
   screenS.draw(video_es) ;

   var jpgEncoder:JPGEncoder = new JPGEncoder();
   var byteArray:ByteArray = jpgEncoder.encode(screenS);

   var fileReference:FileReference=new FileReference();
   fileReference.save(byteArray, "test1.jpg");

}

希望有所帮助