2017-11-15 10 views
-1

一部のデバイスでファイルからビットマップイメージをロードしようとしていますが、私のコードは完全に動作していますが、他のデバイスではOutOfMemory例外が発生します。Android:ファイルオブジェクトからビットマップを取得中にOutOfMemory例外を投げる

String filePath = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA)); 

fileName.add(filePath); 

File file = new File(filePath); 
Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 
bitmapArray.add(myBitmap); 
+3

ビットマップオブジェクトに画像を読み込む際に[Strange memory out]という問題が発生する可能性があります。(https://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-イメージからビットマップオブジェクトへ) – ADM

+0

[メモリ不足の問題](https://stackoverflow.com/questions/19402072/out-of-memory-android-issue)の可能な複製 – JoxTraex

答えて

0

あなたはビットマップのサイズを見つけることができます。

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
BitmapFactory.decodeFile(file.getAbsolutePath(), options); 
int imageHeight = options.outHeight; 
int imageWidth = options.outWidth; 

をして、sampleSizeを設定することにより、所望の大きさに、それを圧縮する:

options = new BitmapFactory.Options(); 
options.inSampleSize = desired_scale_value; 
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), options); 

とロードすることを忘れ `tを非UIスレッドのビットマップ

関連する問題