Actionscript 3 as3 Adobe Air access iPad设备摄像头

Actionscript 3 as3 Adobe Air access iPad设备摄像头,actionscript-3,air,Actionscript 3,Air,有没有一种方法可以使用as3访问iPad的摄像头 我的意思是在应用程序中启动摄像头 能够拍摄并将图像保存到byteArray,并将图像应用到背景或进行一些操作 我做了一些研究,其中大部分只是展示了如何访问android设备。 谢谢你的建议和帮助。是的,你绝对可以这样做。Flash的美妙之处在于,它的代码与Android或PC上使用的代码相同 从字面上说,您可以将相机连接到视频对象: var camera:Camera = Camera.getCamera(); var video=new Vid

有没有一种方法可以使用as3访问iPad的摄像头

我的意思是在应用程序中启动摄像头 能够拍摄并将图像保存到byteArray,并将图像应用到背景或进行一些操作 我做了一些研究,其中大部分只是展示了如何访问android设备。
谢谢你的建议和帮助。

是的,你绝对可以这样做。Flash的美妙之处在于,它的代码与Android或PC上使用的代码相同

从字面上说,您可以将相机连接到视频对象:

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

    }
}

蓝莓1049,我不确定你是否得到了你想要的,但我确实看到了你对全班的要求。我在这篇文章中找到了Jason Sturges在回答中发布的相同信息

与他在这里的回复不同,他对那篇文章的回复中有一个链接,链接到了一个关于构建移动应用程序的伟大教程,而这段代码正是从该教程中摘取/引用的。它需要一个事件类event.CameraEvent-该项目/教程中只包含几行内容,因此能够返回到源代码非常重要。该来源位于此处:

谢谢杰森。为了不必挖掘,下面是引用中缺少的事件类:

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即可获取字节并直接保存。

嗯,是的。这就是我想要传达的:它适用于我在iPhone3GS到4S以及Ipad和Ipad2上使用过的任何iOS设备——不是最新的Ipad,但我不明白为什么它会有任何不同。在同时具有前后摄像头的设备上,可以同时使用前后摄像头。我会尝试一下。谢谢你的帮助。AdobeAir Riaseal,所以请检查这个好的,我将研究它我理解我的问题,也许太板了,但我确实得到了答案。有趣的是,结束这个问题的人,甚至根本不知道AS3…可以拥有这个类的其余部分或整个类的url?这使用了CameraUI。这项技术非常有效,但被称为Air 3.8,可在Air/IOS GPU加速应用程序中造成上下文丢失。我建议改用网络摄像头。虽然我已经解决了我的问题,但非常感谢你。我会把这个答案留作其他参考。谢谢我对这个问题有太多的否定意见-_-