2012-05-17 112 views
5

我有一个简单的动作文件与网络摄像头和图像。我正在做的是 - 当点击一个按钮时,我想捕获摄像头和图像的瞬间并将其呈现在浏览器的DIV中。我如何捕捉它?我猜测需要使用bitmapdata。我想通过代码来做到这一点使用动作捕捉使用网络摄像头的照片

回答

6

这就是我写我自己来回答这个问题。经过Chrome,FF和IE9测试。

您需要Base64编码器(一个是here)和png/jpg编码器(例如Flex库)。

AS代码:

package 
{ 
    import flash.display.BitmapData; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.external.ExternalInterface; 
    import flash.media.Camera; 
    import flash.media.Video; 

    [SWF(width="640", height="480", backgroundColor="#000000")] 
    public class CameraToJS extends Sprite 
    { 
     private var camera:Camera; 
     private var video:Video; 

     public function CameraToJS() 
     { 
      addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
      stage.addEventListener(MouseEvent.CLICK, saveSnapshot); 
     } 

     protected function addedToStageHandler(event:Event):void 
     { 
      camera = Camera.getCamera(); 
      video = new Video(); 
      video.attachCamera(camera); 
      addChild(video); 
     } 

     protected function saveSnapshot(event:MouseEvent):void 
     { 
      var bmData:BitmapData = new BitmapData(video.width, video.height); 
      bmData.draw(video); 

      var encoder:PNGEncoder = new PNGEncoder(); 

      ExternalInterface.call("image", Base64.encodeByteArray(encoder.encode(bmData))); 
     } 
    } 
} 

Javascript代码:

function image(data) 
{ 
    document.getElementById("img").src = "data:image/png;base64,"+ data; 
} 
+0

非常感谢您的解决方案。你太棒了! 我的要求稍有不同,我可以在我现有的代码中使用部分解决方案。事实上,我在编码器方面遇到了一些问题 - 我们应该使用PNGEncoder.encode(bmData)来代替创建对象编码器并在下一行中使用它。 另外,ExternalInterface有点麻烦,因为一些安全设置让我花了一段时间才弄清楚,因为我使用的是Chrome,它曾经在Chrome中静默失败。我看到了Firefox中的错误并修复了它。 –

+0

很高兴我能帮忙=) – Art

0

此链接可能会帮助你,确切地说你想要的。

http://www.xarg.org/project/jquery-webcam-plugin/

+0

谢谢ymutlu,我已经看到了这一点的解决方案。事实上,我正在处理来自网络摄像头的图像,然后将图像放在外面。所以我不能使用它,因为在这种情况下已经生成了swf文件。 –

相关问题