0

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

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

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

我已经创建了监听器,但问题是这个监听器只保存来自网络摄像头的图像而没有我的绘图(即使我将该绘图添加到摄像头)。

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");       
}

我根本没有使用 Flex/Flash 的经验,所以也许我做错了。

你能帮我么?

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

4

1 回答 1

0

这个例子工作正常 - 我没有看到你的代码片段中的问题,但也许你只是在视频上绘制可见图形,在这种情况下图形层在相机后面......希望帽子有帮助;)

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);
        }
    }
}
于 2012-09-23T14:22:22.960 回答