2011-12-30 117 views
2

我的任务是编写一个Flash应用程序,让用户的随身携带的摄像头拍摄的快照,将其连接到一个影片剪辑,并通过添加头发,帽子,眼镜等修改自画像是在菜单上可用。AS3 - 重视网络摄像头视频到MovieClip

我只是想修改两个伟大的脚本:对于摄像头http://www.riacodes.com/flash/captures-images-from-the-webcam-and-save-them-to-the-desktop/和拖动&下拉功能是使用自由变换工具http://blog.ryantan.net/2010/08/free-transform-manager/

我设法让摄像头工作时,我用它作为一个文档类。当我更改我的代码以便自由变换工具代码处于文档类中并且网络摄像头脚本位于Webcamactions.as文件中时,我无法再控制动画片段...动画片段(例如“imagecanvas”视频)。我的Mac的网络摄像头指示灯表示该功能正常,但该视频未出现在动画片段中。

文档类---------- TestFTM.as

package { 
    import Webcamactions; 
    import com.ryan.geom.FreeTransformEvent; 
    import com.ryan.geom.FreeTransformManager; 

    import fl.controls.CheckBox; 
    import fl.motion.easing.Circular; 
    import fl.motion.MatrixTransformer; 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.MouseEvent; 
    import flash.geom.Matrix; 
    import flash.geom.Point; 
    import flash.text.TextField; 
    import flash.ui.Mouse; 

    public class TestFTM extends MovieClip { 

     public var myVar:Webcamactions = new Webcamactions(); 

     private static var _instance:TestFTM; 

     public static function get instance():TestFTM { 
      return _instance; 
     } 

     public var fts:FreeTransformManager; 

     public function TestFTM():void { 
      _instance = this; 

      // Set up FreeTransformManager 
      fts = new FreeTransformManager(false); 

      // Register objects 
      fts.registerSprite(box, { minW:50, maxW:500 }); 

     } 
    } 
} 

WEBCAM类------- Webcamactions.as

package { 
    import flash.display.Sprite; 
    import flash.media.Camera; 
    import flash.media.Video; 
    import flash.display.BitmapData; 
    import flash.display.Bitmap; 
    import flash.events.MouseEvent; 
    import flash.net.FileReference; 
    import flash.utils.ByteArray; 
    import com.adobe.images.JPGEncoder; 
    import flash.display.MovieClip; 

    public class Webcamactions extends MovieClip 
    { 
     public var camera:Camera = Camera.getCamera(); 
     public var video:Video = new Video(); 
     public var bmd:BitmapData = new BitmapData(400,480); 
     public var bmp:Bitmap; 
     public var fileReference:FileReference = new FileReference(); 
     public var byteArray:ByteArray; 
     public var jpg:JPGEncoder = new JPGEncoder(); 

     public var nowebcam:MovieClip = new MovieClip(); 
     public var capture:MovieClip = new MovieClip(); 
     public var imagecanvas:MovieClip = new MovieClip(); 
     public var mask_object:MovieClip = new MovieClip(); 

     public function Webcamactions():void { 
      nowebcam.visible = false; 

      capture.addEventListener(MouseEvent.MOUSE_UP, captureImage); 

      if (camera != null) 
      { 

       camera.setMode(640,480,30,false); // setMode(videoWidth, videoHeight, video fps, favor area) 

       video.smoothing = true; 
       video.attachCamera(camera); 
       video.width = 640; 
       video.height = 480; 
       video.x = -120; 
       video.y = 0; 
       imagecanvas.addChild(video); 
      } 
      else 
      { 
       nowebcam.visible = true;  
       trace("No Camera Detected"); 
      } 
     } 

     public function captureImage(e:MouseEvent):void 
     { 
      bmd.draw(video); 

      while (imagecanvas.numChildren) { 
       imagecanvas.removeChildAt (0); 
      } 

      bmp = new Bitmap(bmd); 
      trace(bmp.width); 
      trace(bmp.height); 
      bmp.width=800; 
      bmp.height=960; 
      bmp.x = -120; 

      imagecanvas.addChild(bmp); 
      capture.visible = true; 

     } 
    } 

我尽可能地做到尽可能清楚,如果有人能给我一些提示如何继续,我真的很感激。提前致谢。

+0

我不知道这是否会解决你的问题,但我建议你启动变量,如摄像头= Camera.getCamera()等,在Webcamactions,而不是直接的构造函数声明它们在那里。另外,构造函数通常不会被声明为返回void,而是没有返回类型(它们可以被认为是返回类的一个实例,虽然它没有被声明)。 – 2011-12-30 18:39:01

回答

-1

我可能会被这里疯狂地,但它并不像你添加imagecanvas内Webcamactions显示列表。

而且,它可能是一个好主意,用精灵,而不是对影片剪辑时,你并不需要一个时间表。

相关问题