2011-07-18 68 views
0

我不明白這個問題,爲什麼BitmapFactory.decodeFile能夠在模擬器上正常工作,但是在HTC的願望上失敗。以下代碼:BitmapFactory.decodeFile在模擬器上正常工作,但在HTC的願望上失敗

File f = new File("/sdcard/DCIM/100MEDIA/"); 
File files[] = f.listFiles(); 

Bitmap b1 = null, b2 = null; 
b1 = BitmapFactory.decodeFile(files[0].getPath()); 
b2 = BitmapFactory.decodeFile(files[1].getPath()); 

這很簡單,但應用程序意外停止在HTC的願望。 哦,我找到了問題:

07-18 08:01:45.634: ERROR/dalvikvm-heap(20637): 8045568-byte external allocation too large for this process. 
07-18 08:01:45.634: ERROR/(20637): VM won't let us allocate 8045568 bytes 
07-18 08:01:45.743: ERROR/AndroidRuntime(20637): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

的圖像是太大,如何處理?我也需要高質量的圖像。

+0

可能是你正在使用的路徑....檢查相同的路徑是可訪問的htc慾望也。 – Kakey

+0

您正嘗試從包含1個文件的數組中獲取2個文件。文件[1]不存在。我不確定,但我不認爲你應該將任何路徑硬編碼到SD卡,因爲不是每個人都有SD卡。 – SynerCoder

+0

我更新了帖子 – AraZZ

回答

2

使用外部道路的推薦方法是getExternalStorageDirectory

更改您的代碼是這樣的。

File f = new File(Environment.getExternalStorageDirectory() + "/DCIM/100MEDIA/"); 
+0

我更新了帖子 – AraZZ

+0

這是一個已知的位圖outofmemoryexception問題搜索。 – PravinCG

0

解碼文件時使用BitmapFactory.Options對象。根據您的屏幕分辨率將樣本尺寸設置爲2或4,以獲得最佳預覽效果。它所做的是對圖像進行縮減採樣,以免它佔用太多內存。

BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inSampleSize = 2; 
Bitmap b1 = BitmapFactory.decodeFile(files[0].getPath(), opts);; 
相關問題