【问题标题】:take a picture of current image from webcam in Flash AS3在 Flash AS3 中从网络摄像头拍摄当前图像
【发布时间】:2012-06-05 18:03:51
【问题描述】:

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

【问题讨论】:

    标签: image actionscript-3 flash webcam


    【解决方案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);
    

    (这部分必须从用户发起的操作中调用,例如点击)。

    【讨论】:

    • 肖恩看起来非常棒。你说This part has to be called from a user-initiated action,是哪一部分? var fileReference:FileReference = new FileReference(); fileReference.save(byteArray); 部分?
    • 对,这是一项安全功能。 Flash 不会让您在没有用户单击或按键的情况下打开“另存为...”对话框。
    • 讨厌一直打扰你,但它似乎在保存一个空白的 jpeg 文件。文件大小似乎正确,但没有图像,只有一张空白的白色图像......我将使用当前代码编辑我的问题。谢谢xD
    • 啊,我明白我做错了什么。我应该在用户点击时绘制图像和编码,而不是之前。我的错。谢谢。
    • @navnav 绘图不必在点击事件中,它只需要在视频准备好时完成,这需要几秒钟。很高兴你成功了。
    【解决方案2】:

    好吧,试试这段代码,我用过,效果很好:

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 2013-03-22
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多