0

로드 할 카메라 롤을 사용하는 Android 용 AS3 앱을 선택하고 이미지를 선택한 다음 사용합니다.AS3 android 카메라 롤 크래시 및 다시 시작

카메라 롤 브라우저는 정상적으로 작동하지만 이미지를 선택하면 거의 모든 시간에 앱이 다운됩니다 (!?!). 메모리 문제가 있다고 가정하고 다른 모든 프로그램을 닫으려고했습니다. 창문/카메라 롤 등의 작은 사진을 사용하고 다른 장치를 사용해보십시오. 그러나 일관되게 성공을 재현 할 수는 없습니다. 여기에 하나

그것은 사진이 선택된 지점에서 실패하고 응용 프로그램을 다시 시작합니다 ...

를 작동하는 관련 코드의 다른 ANE를 찾을 수 없습니다, 어떤 도움에 감사드립니다.

public function openGallery():void { 
      var cameraRoll:CameraRoll = new CameraRoll(); 
      if(CameraRoll.supportsBrowseForImage) { 
       cameraRoll.addEventListener(MediaEvent.SELECT, imageSelected); 
       cameraRoll.addEventListener(flash.events.Event.CANCEL, browseCanceled); 
       cameraRoll.addEventListener(flash.events.ErrorEvent.ERROR, mediaError); 
       cameraRoll.browseForImage(); 
      } 
      else { trace("Image browsing is not supported on this device."); } 
     } 

private function imageSelected(event:MediaEvent):void { 
      trace("Media selected..."); 
      var imagePromise:MediaPromise = event.data as MediaPromise; 
      _dataSource = imagePromise.open(); 
      if(imagePromise.isAsync) { 
       trace("Asynchronous media promise."); 
       var eventSource:IEventDispatcher = _dataSource as IEventDispatcher; 
       eventSource.addEventListener(flash.events.Event.COMPLETE, onMediaLoaded); 
      } else { 
       trace("Synchronous media promise."); 
       readMediaData(); 
      } 
     } 

private function onMediaLoaded(event:flash.events.Event):void{ 
      trace("Media load complete"); 

      _mediaBytes = new ByteArray();    
      _dataSource.readBytes(_mediaBytes);      
      _tempDir = File.createTempDirectory();    
      var now:Date = new Date();    
      var filename:String;    
      filename = now.fullYear + now.month + now.day+now.hours + now.minutes + now.seconds + ".JPG";    
      _file = _tempDir.resolvePath(filename); 

      //writing temporal file to display image    
      _stream = new FileStream();    
      _stream.open(_file,FileMode.WRITE);    
      _stream.writeBytes(_mediaBytes);    
      _stream.close(); 

      if(_file.exists){ 

       _imageLoader = new Loader();     
       _imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onMediaLoadedBitmapData);     
       _imageLoader.loadBytes(_mediaBytes); 

      } 

     } 

     private function onMediaLoadedBitmapData(event:Event):void{ 
      trace("onMediaLoadedBitmapData"); 
      var loaderInfo:LoaderInfo = LoaderInfo(event.target);    
      _bitmapData = new BitmapData(loaderInfo.width,loaderInfo.height,false,0xFFFFFF);    
      _bitmapData.draw(loaderInfo.loader); 
         addPictureToScreen(); 
     } 

답변

0

iOS 용 Air에서 비슷한 일이 발생했지만 큰 이미지를 선택하는 것과 관련이있었습니다. 방금 선택한 이미지의 크기를 확인한 다음 스칼라 매트릭스가 특정 지점을 지난 경우 사용했습니다. 너는 이것에 대해 생각해 봤지만 어쩌면 그걸 좀 더 들여다 보는 것 같니?