2011-12-30 120 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顯示列表。

而且,它可能是一個好主意,用精靈,而不是對影片剪輯時,你並不需要一個時間表。

相關問題