2013-01-19 200 views
2

我在Flash Builder中使用JPGEncoder函数将拍摄的图像从设备转换为字节数组,但在iOS中创建iOS和Android应用程序我的应用程序冻结,并且在Android中,屏幕一分钟黑屏左右,然后继续。以下是我正在使用的代码。JPGEncoder冻结应用程序

private var uploadData:ByteArray; 
     protected var camera:CameraUI; 
     protected var loader:Loader; 
     public var file:File; 

     protected function takePhoto():void { 
      if (CameraUI.isSupported){ 
       camera = new CameraUI(); 
       camera.addEventListener(MediaEvent.COMPLETE, savePhoto); 
       camera.launch(MediaType.IMAGE); 
      } 
     } 

     protected function savePhoto(e:MediaEvent):void 
     { 
      uploadProgress.visible = true; 
      var imagePromise:MediaPromise = e.data; 
      var loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPhotoBitmapLoadComplete); 
      loader.loadFilePromise(imagePromise); 
     } 

     protected function onPhotoBitmapLoadComplete(e:Event):void 
     { 
      var loaderInfo:LoaderInfo = e.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(); 

       uploadData = bytes; 
       SetupWebService(); 
      } 
     } 

回答

1

及其因为编码器是不asynchonous,它可能需要一段时间来编码一个大的图像;特别是jpeg,特别是在移动设备上。

这里有异步编码器,但不允许自我提升。提示提示。

编辑:规则是该死的!继承人链接到我的博客文章(和代码)异步编码:http://blog.leeburrows.com/2011/01/saving-an-image-to-hd-with-actionscript-part-2/

+0

感谢您的回复!我见过很多人说使用异步编码器,但这就是为什么我的iOS应用程序冻结?因为它不是asyc? –

+0

你是对的 – 2013-01-19 20:20:50

+0

谢谢!这真的有帮助 –