【问题标题】:Defining Images Taken using the iOS camera Adobe Air定义使用 iOS 相机 Adob​​e Air 拍摄的图像
【发布时间】:2013-06-06 18:51:37
【问题描述】:

所以,我正在开发一个在 Adob​​e Air 和 Actionscript 3.0 中使用相机的应用程序,我知道 CameraUI 等,但我只是在定义使用相机拍摄的图像时遇到了问题,所以我可以bitmapData 和所有的爵士乐,这是我的代码

import flash.media.CameraUI;



var cameraUI:CameraUI = new CameraUI();

if (CameraUI.isSupported ) 
{
    cameraUI.addEventListener(MediaEvent.COMPLETE, imageSelected); 
    cameraUI.addEventListener(MediaEvent.ERROR, imageError);
    cameraUI.addEventListener(MediaEvent.CANCEL, imagecancelled);
    cameraUI.launch(MediaType.IMAGE); 
}

那么,无论如何定义使用相机拍摄的图像。谢谢

【问题讨论】:

    标签: ios actionscript-3 air camera adobe


    【解决方案1】:

    来自文档:

    http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/CameraUI.html#includeExamplesSummary

    编辑

    [用于移动应用的我的相机代码]

    package com.shaunhusain.fingerPainting.tools 
    {
        import flash.display.Loader;
        import flash.display.Stage;
        import flash.events.ErrorEvent;
        import flash.events.Event;
        import flash.events.IOErrorEvent;
        import flash.events.MediaEvent;
        import flash.events.TouchEvent;
        import flash.media.CameraUI;
        import flash.media.MediaPromise;
        import flash.media.MediaType;
    
        public class CameraTool extends ToolBase implements ITool
        {
            //--------------------------------------------------------------------------------
            //              Variables
            //--------------------------------------------------------------------------------
            private var deviceCameraApp:CameraUI = new CameraUI();
            private var imageLoader:Loader; 
    
            //--------------------------------------------------------------------------------
            //              Constructor
            //--------------------------------------------------------------------------------
            public function CameraTool(stage:Stage) {
                super(stage);
    
                if( CameraUI.isSupported )
                {
                    trace( "Initializing camera..." );
    
                    deviceCameraApp.addEventListener( MediaEvent.COMPLETE, imageCaptured );
                    deviceCameraApp.addEventListener( Event.CANCEL, captureCanceled );
                    deviceCameraApp.addEventListener( ErrorEvent.ERROR, cameraError );
                }
                else
                {
                    trace( "Camera interface is not supported.");
                }
            }
    
            //--------------------------------------------------------------------------------
            //              Handlers
            //--------------------------------------------------------------------------------
            public function takeAction(event:TouchEvent=null):void
            {
                model.disableNextAutosave = true;
                deviceCameraApp.launch( MediaType.IMAGE );
            }
    
            //--------------------------------------------------------------------------------
            //              Camera UI functions
            //--------------------------------------------------------------------------------
    
            private function imageCaptured( event:MediaEvent ):void
            {
                trace( "Media captured..." );
    
                var imagePromise:MediaPromise = event.data;
    
                if( imagePromise.isAsync )
                {
                    trace( "Asynchronous media promise." );
                    imageLoader = new Loader();
                    imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, asyncImageLoaded );
                    imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError );
    
                    imageLoader.loadFilePromise( imagePromise );
                }
                else
                {
                    trace( "Synchronous media promise." );
                    imageLoader.loadFilePromise( imagePromise );
                    showMedia( imageLoader );
                }
            }
    
            private function captureCanceled( event:Event ):void
            {
                trace( "Media capture canceled." );
            }
    
            private function asyncImageLoaded( event:Event ):void
            {
                trace( "Media loaded in memory." );
                showMedia( imageLoader );    
            }
    
            private function showMedia( loader:Loader ):void
            {
                loader.scaleX=-1;
                layerM.addLayer( loader );
            }
    
            private function cameraError( error:ErrorEvent ):void
            {
                trace( "Error:" + error.text );
            }
    
            public function toString():String
            {
                return "Loading CameraUI";
            }
    
        }
    }
    

    这是我项目中的一个示例: https://github.com/wafflejock/FingerPainting/blob/master/FlashBuilderProject/FingerPainting/src/com/shaunhusain/fingerPainting/tools/CameraTool.as

    演示/无耻的自我宣传:

    https://play.google.com/store/apps/details?id=air.com.chitowngames.DigitalDoodler

    您可以更改 showMedia 函数中与加载器相关的内容。因此,如果您想访问 BitmapData,只需执行以下操作:

    (loader.content as Bitmap).bitmapData
    

    【讨论】:

    • 我知道这一点,但是有没有更简单的解决方案来定义甚至在拍摄之前拍摄的图像?
    • @user1666767 这对我来说真的没有任何意义吗?我相信由操作系统实际将图像保存到内存(据我所知,您无法控制)。然后它会为您提供一个句柄来从内存中解析/加载该引用。据我所知,这很容易。在加载器的内容中有位图后,您可以提取位图数据。
    • 有没有可能你自己写,因为我不太明白你在说什么?
    • 我粘贴了我在应用程序中实际使用的代码。如果您仍有疑问,请告诉我,这使您可以从相机捕获图像然后加载它。在我的例子中,我只是将它传递给我为处理图像编辑器中的图层而创建的 LayerManager 类,然后它会将 BitmapData 添加到舞台。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多