2013-01-19 3 views
2

JPGEncoder 함수를 사용하여 촬영 한 이미지를 장치에서 bytearray로 변환하는 iOS 및 Android 응용 프로그램을 Flash Builder에서 만들고 있지만 iOS에서는 내 응용 프로그램이 멈추고 Android에서는 화면이 잠깐 검은 색으로 변합니다 그렇지 않으면 계속됩니다. 아래는 내가 사용하고있는 코드입니다.JPGEncoder Freezing App

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

왜냐하면 인코더가 비동기식이 아니며 큰 이미지를 인코딩하는 데 시간이 걸릴 수 있기 때문입니다. 특히 jpeg 및 특히 모바일에서.

비동기 인코더가 있지만 자체 프로모션이 허용되지 않습니다. 힌트 힌트.

편집 : 규칙대로 지켜야합니다! 비동기 인코딩에 대한 내 블로그 게시물 (및 코드)에 대한 링크를 heres : http://blog.leeburrows.com/2011/01/saving-an-image-to-hd-with-actionscript-part-2/

+0

답장을 보내 주셔서 감사합니다! 나는 많은 사람들이 비동기식 인코더를 사용하는 것을 보았으나 그것이 나의 iOS 어플리케이션이 정지 된 이유인가? 그것은 asyc가 아니기 때문에? –

+0

당신은 정확합니다 –

+0

고마워! 정말 도움이 됐어. –