【问题标题】:iOS saving images in flashbuilder air mobile app with CameraUIiOS 使用 CameraUI 在 flashbuilder air 移动应用中保存图像
【发布时间】:2013-02-25 00:18:04
【问题描述】:

**我有一个我一直在开发的适用于 iOS 的空中应用程序。我正在尝试捕获图片,将文件保存到存储目录(不是相机胶卷),并将文件名保存在 sqlite db 中。

我已经尝试了很多不同的变体,但是在编写文件流以保存应用程序时会挂起。在 iPad 3 上进行测试。有人有什么建议吗?这几天让我发疯了。我已经在网上搜索过,但我很难过。**

      public var temp:File; // File Object to save name in database
        protected function selectPicture():void
        {
            
            myCam = new CameraUI();
            myCam.addEventListener(MediaEvent.COMPLETE, onComplete);
        
            myCam.launch(MediaType.IMAGE);
        }
        
        
        protected function onComplete(event:MediaEvent):void {
        
        //imageProblem.source = event.data.file.url;
        
            var cameraUI:CameraUI = event.target as CameraUI;
            
            
            var mediaPromise:MediaPromise = event.data;
            
            var mpLoader:Loader = new Loader();
            mpLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMediaPromiseLoaded);
            
            mpLoader.loadFilePromise(mediaPromise);
            

        }
        
        private function onMediaPromiseLoaded(e:Event):void
        {
            var mpLoaderInfo:LoaderInfo = e.target as LoaderInfo;
            mpLoaderInfo.removeEventListener(Event.COMPLETE, onMediaPromiseLoaded);
            
            this.imageProblem.source = mpLoaderInfo.loader;
            
        
            var stream:FileStream = new FileStream();
            
            stream.addEventListener(Event.COMPLETE, showComplete);
            stream.addEventListener(IOErrorEvent.IO_ERROR, showError);
            
            
            try{
                
            this.messages.text = "Starting";
                
            stream.open( temp, FileMode.WRITE );
            stream.writeBytes(mpLoaderInfo.bytes);
            stream.close();
            
            }catch(e:Error){
            
                this.messages.text = e.message;
            
            }
            
            
        
        
        
        }
        
        protected function showError(e:IOErrorEvent):void{
            
            this.messages.text = e.toString();
            
            
        }
        
        protected function showComplete(e:Event):void{
            
            this.messages.text = "Completed Writing";
            this.imgName.text = temp.url;
            imagefile = temp;
            deleteFlag = 1;
        }

【问题讨论】:

    标签: ios actionscript-3 air flash-builder


    【解决方案1】:

    由于您试图在Sync mode 中使用文件操作,应用程序挂起。

    您需要使用Async Mode操作,而不是同步模式文件操作。

    stream.openAsync( temp, FileMode.WRITE );
    

    试试这个

    var stream:FileStream = new FileStream();
    stream.addEventListener(Event.COMPLETE, showComplete);
    stream.addEventListener(IOErrorEvent.IO_ERROR, showError);
    stream.openAsync( temp, FileMode.WRITE );
    stream.writeBytes(mpLoaderInfo.bytes);
    stream.close();
    

    注意,当使用异步操作时,你不需要使用try catch。为了处理错误监听IOErrorEvent会捕捉到任何错误发生。

    【讨论】:

    • 其实我也尝试过异步方法。它仍然产生相同的结果。 try catch 块是让我看看我在编写过程中是否遇到错误。但我当然感谢您的帮助
    【解决方案2】:

    我终于让它工作了,我在下面的代码中添加了 cmets 来解释它为什么不工作。

                        public var temp:File;
            protected function selectPicture():void
            {
    
                myCam = new CameraUI();
                myCam.addEventListener(MediaEvent.COMPLETE, onComplete);
    
                myCam.launch(MediaType.IMAGE);
            }
    
    
            protected function onComplete(event:MediaEvent):void {
    
            //imageProblem.source = event.data.file.url;
    
                var cameraUI:CameraUI = event.target as CameraUI;
    
    
                var mediaPromise:MediaPromise = event.data;
    
                var mpLoader:Loader = new Loader();
                mpLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMediaPromiseLoaded);
    
                mpLoader.loadFilePromise(mediaPromise);
    
    
            }
    
            private function onMediaPromiseLoaded(e:Event):void
            {
                var mpLoaderInfo:LoaderInfo = e.target as LoaderInfo;
                mpLoaderInfo.removeEventListener(Event.COMPLETE, onMediaPromiseLoaded);
    
                this.imageProblem.source = mpLoaderInfo.loader;
    
    
    
    
                    /// Here was the solution
    
                    var bitmapDataA:BitmapData = new BitmapData(mpLoaderInfo.width, mpLoaderInfo.height);
                    bitmapDataA.draw(mpLoaderInfo.content,null,null,null,null,true);  
    
                    /// I had to cast the loaderInfo as BitmapData 
    
                    var bitmapDataB:BitmapData = resizeimage(bitmapDataA, int(mpLoaderInfo.width / 4), int(mpLoaderInfo.height/ 4));  // function to shrink the image
    
    
    
    
    
                    var c:CameraRoll = new CameraRoll();
                    c.addBitmapData(bitmapDataB);
    
                    var now:Date = new Date();
                    var f:File = File.applicationStorageDirectory.resolvePath("IMG" + now.seconds + now.minutes + ".jpg");                                    
                    var stream:FileStream = new FileStream()
                    stream.open(f, FileMode.WRITE);                                         
    
                    // Then had to redraw and encode as a jpeg before writing the file
    
    
                    var bytes:ByteArray = new ByteArray();
                    bytes = bitmapDataB.encode(new Rectangle(0,0, int(mpLoaderInfo.width / 4) , int(mpLoaderInfo.height / 4)), new JPEGEncoderOptions(80), bytes);
    
    
    
    
                    stream.writeBytes(bytes,0,bytes.bytesAvailable);
                    stream.close(); 
    
                    this.imgName.text = f.url;
    
    
                imagefile = f;
                deleteFlag = 1;
    
            }
    

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多