1

因此,我设法使用以下代码在 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 类。有任何想法吗?

4

2 回答 2

1

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

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

然后,您需要对BitmapData. 我会推荐使用 Alchemy 的编码器,但 Adob​​e 正在从 Flash Player 中删除它。因此,您应该使用较慢的as3corelib JPGEncoder

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

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

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

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

于 2012-06-05T19:33:37.440 回答
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");

}

希望有帮助

于 2013-11-17T02:40:56.303 回答