Actionscript 3 利用Flex中的实时视频-快照问题

Actionscript 3 利用Flex中的实时视频-快照问题,actionscript-3,flash,flex4,video-capture,Actionscript 3,Flash,Flex4,Video Capture,我正在做一个项目,在那里我必须制作一个注释视频播放器 基本上,我遵循了本教程[1],作者介绍了如何使用Flex在自己的网络摄像头上绘制(在本例中仅为一个矩形) 一切都进行得很顺利,但现在我想添加一个侦听器来获取图像的快照(我所绘制的内容+网络摄像头图像),然后将其保存到我的计算机上 我已经创建了监听器,但问题是,该监听器只保存来自web摄影机的图像,而不保存我的绘图(即使我将该绘图添加到摄影机中) 我对Flex/Flash没有任何经验,所以可能我做错了smth 你能帮帮我吗 [1]http://

我正在做一个项目,在那里我必须制作一个注释视频播放器

基本上,我遵循了本教程[1],作者介绍了如何使用Flex在自己的网络摄像头上绘制(在本例中仅为一个矩形)

一切都进行得很顺利,但现在我想添加一个侦听器来获取图像的快照(我所绘制的内容+网络摄像头图像),然后将其保存到我的计算机上

我已经创建了监听器,但问题是,该监听器只保存来自web摄影机的图像,而不保存我的绘图(即使我将该绘图添加到摄影机中)

我对Flex/Flash没有任何经验,所以可能我做错了smth

你能帮帮我吗


[1]http://narinderkumar.wordpress.com/2012/02/16/drawing-on-live-video-in-flex/

这个例子效果很好-我看不出你的代码片段有什么问题,但也许你只是在视频上画vis图形,在这种情况下,图形层就在相机后面。。。希望帽子有帮助;)

private function save():void {

    var bitmapData:BitmapData = new BitmapData(videoDisplay.width,videoDisplay.height);
    bitmapData.draw(videoDisplay);

    var ba:ByteArray = (new PNGEncoder()).encode(bitmapData);
    (new FileReference()).save(ba, "doodle.png");       
}
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.media.Camera;
    import flash.media.Video;

    public class cameratest extends Sprite
    {
        private var holder:Sprite;
        private var layover:Sprite;
        private var display:Sprite;

        public function cameratest()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align     = StageAlign.TOP_LEFT;

            var cam:Camera = Camera.getCamera();
            var video:Video     =new Video(cam.width, cam.height);
            video.attachCamera(cam);

                    //holder hollds the video and on top the layover to draw on
            holder = new Sprite();
            stage.addChild(holder);
            holder.addChild(video);

            //layover to draw on                
            layover = new Sprite();
            holder.addChild(layover);

            //will show the snapshot
            display = new Sprite();
            display.x= 350;
            stage.addChild(display);

            //listener for onclick do snapshot
            stage.addEventListener(MouseEvent.CLICK, drawAndSave);
        }
        private function drawAndSave(E:Event=null):void{
            layover.graphics.beginFill(0xff0000,1);
            layover.graphics.drawCircle(10,10,10);

            var bmd:BitmapData=new BitmapData(holder.width,holder.height);
            bmd.draw(holder);

            var bmp:Bitmap = new Bitmap(bmd,'auto',true);
            display.addChild(bmp);
        }
    }
}