我不明白这个问题,为什么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 :(得分:2)
使用外部路径的推荐方法是getExternalStorageDirectory
将您的代码更改为此类内容。
File f = new File(Environment.getExternalStorageDirectory() + "/DCIM/100MEDIA/");
答案 1 :(得分:0)
解码文件时使用BitmapFactory.Options对象。根据您的屏幕分辨率,将inSampleSize设置为2或4,以获得最佳预览。它的作用是对图像进行下采样,使其不会占用太多内存。
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 2;
Bitmap b1 = BitmapFactory.decodeFile(files[0].getPath(), opts);;