2013-01-19 199 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

謝謝!這真的有幫助 –