簡體   English   中英

as3 Adob​​e Air訪問iPad設備攝像頭

[英]as3 Adobe Air access iPad device camera

有沒有一種方法可以使用as3訪問iPad的相機?

  • 我的意思是在應用程序本身中啟動相機
  • 有能力拍攝並將圖像保存到byteArray並將圖像應用於背景或進行一些操作

我已經做了一些研究,其中大多數只是顯示如何訪問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...

如果您想做一些有用的事情,還有很多事情要做,但是一旦開始就很簡單了:)

bluebill1049,我不能從線程中確定您是否找到了想要的東西,但是我確實看到了您對整個課程的要求。 我在這篇文章中發現了相同的信息(Jason Sturges在他的答案中發布了)。

使用適用於iOS的Adobe Builder(flex)拍照

與這里的回復不同的是,他對該帖子的回復具有指向有關構建移動應用程序的出色教程的鏈接,並且正是從該教程中取消/引用了這段代碼。 它需要一個事件類(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;
        }
    }
}

希望有幫助!

使用加載程序不是訪問iOS上圖像字節的唯一方法。 事實證明,數據開始時已經是JPEG格式,因此無需再次編碼。

只需執行mediaPromise.open()獲取字節並直接保存即可。

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));
            }
        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM