2012-04-13 22 views
-1

有沒有什麼建議可以使用AS3訪問iPad的攝像頭呢?AS3 Adob​​e AIR的訪問iPad設備的相機

  • 我指的是應用程序本身內啓動相機
  • 有能力採取拍攝並保存圖像的ByteArray和應用圖像背景或做一些操作

我做了一些研究他們大多隻是展示如何訪問Android設備。 感謝任何建議或幫助。

+1

也結帳這個https://twitter.com/#!/inspirit/status/189618267743195136 – 2012-04-13 08:19:31

+0

不錯,我打算看看它 – Bruce 2012-04-15 23:19:56

+1

我明白我的問題也許太板,但我沒有得到答案。有趣的是,關閉這個問題的人,甚至都不知道AS3 ... – Bruce 2012-08-31 00:21:41

回答

7

是的,你完全可以做到這一點。 Flash的美妙之處在於,它的代碼與您在Android或PC上使用的代碼相同。

從字面上看,你可以這樣做將相機連接到Video對象:

var camera:Camera = Camera.getCamera(); 
var video=new Video(); 
video.attachCamera(camera); 
this.addChild(video); // 'this' would be a Sprite or UIComponent, etc... 

還有很多更多,如果你想要做一些有益的事,但它是相當簡單的,一旦你開始: )

+0

這適用於iOS? – Bruce 2012-04-13 02:53:44

+0

恩,是的。這就是我想要溝通:)它適用於任何iOS設備(我用它在iPhone 3GS到4S,以及Ipad和Ipad2 - 不是最新的Ipad,但我不明白爲什麼它會有任何不同。與前置/後置攝像頭(在具有兩者的設備上)。 – 2012-04-13 02:57:51

+0

我給它一個試試哥們。謝謝您的幫助。 ADOBE AIR RIASE – Bruce 2012-04-13 03:02:56

0

XpenseIt示例代碼可提供這相機實現:

類別:CameraUtil:

package utils 
{ 
    import events.CameraEvent; 

    import flash.display.BitmapData; 
    import flash.display.Loader; 
    import flash.display.LoaderInfo; 
    import flash.events.Event; 
    import flash.events.EventDispatcher; 
    import flash.events.MediaEvent; 
    import flash.filesystem.File; 
    import flash.filesystem.FileMode; 
    import flash.filesystem.FileStream; 
    import flash.media.CameraRoll; 
    import flash.media.CameraUI; 
    import flash.media.MediaPromise; 
    import flash.media.MediaType; 
    import flash.utils.ByteArray; 

    import mx.events.DynamicEvent; 
    import mx.graphics.codec.JPEGEncoder; 

    [Event(name = "fileReady", type = "events.CameraEvent")] 
    public class CameraUtil extends EventDispatcher 
    { 
     protected var camera:CameraUI; 
     protected var loader:Loader; 
     public var file:File; 

     public function CameraUtil() 
     { 
      if (CameraUI.isSupported) 
      { 
       camera = new CameraUI(); 
       camera.addEventListener(MediaEvent.COMPLETE, mediaEventComplete); 
      } 
     } 

     public function takePicture():void 
     { 
      if (camera) 
       camera.launch(MediaType.IMAGE); 
     } 

     protected function mediaEventComplete(event:MediaEvent):void 
     { 
      var mediaPromise:MediaPromise = event.data; 
      if (mediaPromise.file == null) 
      { 
       // For iOS we need to load with a Loader first 
       loader = new Loader(); 
       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleted); 
       loader.loadFilePromise(mediaPromise); 
       return; 
      } 
      else 
      { 
       // Android we can just dispatch the event that it's complete 
       file = new File(mediaPromise.file.url); 
       dispatchEvent(new CameraEvent(CameraEvent.FILE_READY, file)); 
      } 
     } 

     protected function loaderCompleted(event:Event):void 
     { 
      var loaderInfo:LoaderInfo = event.target as LoaderInfo; 
      if (CameraRoll.supportsAddBitmapData) 
      { 
       var bitmapData:BitmapData = new BitmapData(loaderInfo.width, loaderInfo.height); 
       bitmapData.draw(loaderInfo.loader); 
       file = File.applicationStorageDirectory.resolvePath("receipt" + new Date().time + ".jpg"); 
       var stream:FileStream = new FileStream() 
       stream.open(file, FileMode.WRITE); 
       var j:JPEGEncoder = new JPEGEncoder(); 
       var bytes:ByteArray = j.encode(bitmapData); 
       stream.writeBytes(bytes, 0, bytes.bytesAvailable); 
       stream.close(); 
       trace(file.url); 
       dispatchEvent(new CameraEvent(CameraEvent.FILE_READY, file)); 
      } 
     } 

    } 
} 
+0

看起來很有用 – Bruce 2012-04-13 06:14:51

+0

可以有班級的其餘部分或整個班級的網址嗎? – Bruce 2012-04-23 05:00:35

+0

這使用CameraUI。這很好用,但已知(如Air 3.8),以在AIR/IOS GPU加速應用程序中創建上下文丟失。我建議使用網絡攝像頭方法。 – mika 2013-09-27 14:29:09

1

bluebill1049,我不是從線程肯定,如果你得到了什麼你要找的,但我沒有看到你的全班請求。我在這篇文章中發現了相同的信息(Jason Sturges在他的回答中發佈的信息)。

take photo using Adobe Builder (flex) for iOS

不像他的答覆這裏,他到後答覆了一個鏈接到一個偉大的教程上建立一個移動應用程序,這是由該教程,該代碼被解除/報價。它需要一個包含在該項目/教程中的事件類(event.CameraEvent - 只有幾行),因此能夠返回到源代碼非常重要。該源位於:

http://devgirl.org/files/RIAUnleashed/

我要感謝傑森。只是讓你不必挖,這裏是一個的從報價失蹤事件類:

package events 
{ 
    import flash.events.Event; 
    import flash.filesystem.File; 

    public class CameraEvent extends Event 
    { 
     public static const FILE_READY:String = "fileReady"; 

     public var file:File; 

     public function CameraEvent(type:String, file:File=null, bubbles:Boolean = true, cancelable:Boolean = true) 
     { 
      super(type, bubbles, cancelable); 
      this.file = file; 
     } 
    } 
} 

希望幫助!

+0

雖然我已經解決了我的問題,但非常感謝你。我會保留這個答案的任何其他參考。謝謝!! (我對這個問題有很多否定-_-) – Bruce 2012-12-03 10:21:26

1

使用加載程序不訪問iOS上的圖像字節的唯一途徑。事實證明,數據已經以JPEG格式開始,所以再次編碼不是必需的。

只是做一個mediaPromise.open()獲得在字節和保存,而不是直接。