我知道有很多關於「用android加載圖像」主題的線程,但不幸的是我沒有找到解決我的任何問題的解決方案。因此,這裏是我的問題:Android的BitmapFactory不加載尺寸
我要救一個大的圖像,另一個用於後裁剪,這裏是我的代碼:
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(image, bmOptions);
final int REQUIRED_SIZE = 800;
int scale = 1;
while (bmOptions.outWidth/scale/2 >= REQUIRED_SIZE && bmOptions.outHeight/scale/2 >= REQUIRED_SIZE) {
scale *= 2;
}
bmOptions.inJustDecodeBounds = false;
bmOptions.inSampleSize = scale;
bmOptions.inPurgeable = true;
bmOptions.inInputShareable = true;
// create the Image for the original File
try {
File origFile = File.createTempFile(origImage, JPEG_FILE_SUFFIX, getAlbumDir());
OutputStream fOut2 = new FileOutputStream(origFile);
Bitmap thePic = BitmapFactory.decodeFile(image, bmOptions);
thePic.compress(Bitmap.CompressFormat.JPEG, 100, fOut2);
fOut2.flush();
fOut2.close();
} catch (Exception e) {
Log.e(TAG, "Cannot create original Image");
}
mImageBitmap = BitmapFactory.decodeFile(image, bmOptions);
此代碼〜90%的時間。但有時bmOptions.outHeight
& bmOptions.outWidth returns -1
和行Bitmap thePic = BitmapFactory.decodeFile(image, bmOptions);
我得到異常:
10-31 12:07:31.645: E/AndroidRuntime(16618): java.lang.OutOfMemoryError
10-31 12:07:31.645: E/AndroidRuntime(16618): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-31 12:07:31.645: E/AndroidRuntime(16618): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:652)
10-31 12:07:31.645: E/AndroidRuntime(16618): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:391)
我認爲這個問題可以是:
- 我採取多種照片背靠背經過一段時間這個錯誤可能 發生
- 它發生在我把我的顯示器雖然拍攝照片
但經過大量測試後,我仍然不確定這兩種可能性中的任何一種是否屬實,或者是否有其他問題。
有沒有人知道我在做什麼錯?
編輯:
後大量的測試與我的應用程序,我有以下問題:
每次啓動過程中,我失去〜2 MB的RAM。這意味着一段時間後我的應用程序將關閉。
我做了什麼來解決這個問題:
- )不創建原始圖像 - )設定的樣本量爲16(而不是計算2) - )完全去除位圖
問題保持不變;我總是丟失2 MB RAM。有沒有人知道問題可能是什麼?
「bmOptions.inJustDecodeBounds = true;」比在Android的另一個錯誤?解決方案之一就是編寫你自己的解碼rutine來只讀大小。在調用該代碼之前請檢查您的應用程序有多少可用內存。如果你有很少的:只有1 MB或類似的東西,比你的應用程序已經使用很多,沒有地方執行代碼 – 2013-10-31 11:54:46