有沒有什麼建議可以使用AS3訪問iPad的攝像頭呢?AS3 Adobe AIR的訪問iPad設備的相機
- 我指的是應用程序本身內啓動相機
- 有能力採取拍攝並保存圖像的ByteArray和應用圖像背景或做一些操作
我做了一些研究他們大多隻是展示如何訪問Android設備。 感謝任何建議或幫助。
有沒有什麼建議可以使用AS3訪問iPad的攝像頭呢?AS3 Adobe AIR的訪問iPad設備的相機
我做了一些研究他們大多隻是展示如何訪問Android設備。 感謝任何建議或幫助。
是的,你完全可以做到這一點。 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...
還有很多更多,如果你想要做一些有益的事,但它是相當簡單的,一旦你開始: )
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));
}
}
}
}
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;
}
}
}
希望幫助!
雖然我已經解決了我的問題,但非常感謝你。我會保留這個答案的任何其他參考。謝謝!! (我對這個問題有很多否定-_-) – Bruce 2012-12-03 10:21:26
使用加載程序不訪問iOS上的圖像字節的唯一途徑。事實證明,數據已經以JPEG格式開始,所以再次編碼不是必需的。
只是做一個mediaPromise.open()
獲得在字節和保存,而不是直接。
也結帳這個https://twitter.com/#!/inspirit/status/189618267743195136 – 2012-04-13 08:19:31
不錯,我打算看看它 – Bruce 2012-04-15 23:19:56
我明白我的問題也許太板,但我沒有得到答案。有趣的是,關閉這個問題的人,甚至都不知道AS3 ... – Bruce 2012-08-31 00:21:41