ios - 使用适用于 iOS 的 Adob​​e Builder (flex) 拍照

标签 ios apache-flex camera

有人知道如何使用 flex 拍照吗?我有点失落!我找到了一些教程,但不起作用!

最佳答案

XpenseIt ( Flex mobile project FXP download ) 示例代码提供了此相机实现。

调用takePicture()启动相机,然后从loaderInfo.loader获取图像。

var bitmapData:BitmapData = new BitmapData(loaderInfo.width, loaderInfo.height);
bitmapData.draw(loaderInfo.loader);

下面的相机实用程序类:

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

    }
}

关于ios - 使用适用于 iOS 的 Adob​​e Builder (flex) 拍照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812807/

相关文章:

android - Android 相机 API 的包装器库

iOS 13 UISearchController 书签

ios - 移除每个 MDCInputField 下方的标签/标签间距

ios - 如何为我的长时间运行函数设置超时?

apache-flex - E4X:在表达式中使用字符串作为属性名称?

javascript - Flash对象的方法在隐藏后不可用

ios - 获取 Apple 智能电池盒的电池电量

apache-flex - 建立SWF时如何指定SWC?

ios - Google Photo Sphere 相机功能

ios - 设置相机闪光灯在iOS 10中不起作用