0

カメラロールを使用して画像を読み込み、選択して使用する Android 用 AS3 アプリを作成します。

カメラロール ブラウザは正常に動作しますが、画像が選択されるとアプリがクラッシュします - ほぼ毎回 - 少数の場合に動作したため (!?!) メモリの問題を想定し、他のすべてのウィンドウを閉じようとしましたカメラロールなどの写真を試して、さまざまなデバイスを試してみてください - しかし、一貫して成功を再現することはできません. 機能する別の 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();
        }
4

1 に答える 1

0

Air for iOS でも同様のことが起こりましたが、大きな画像の選択に関連していました。選択した画像のサイズを確認し、特定のポイントを超えている場合はスカラー マトリックスを使用しました。これについて考えたことがあるように聞こえますが、もっと詳しく調べてみませんか?

于 2014-07-16T01:48:24.623 に答える