BitmapFactory.decodeFile отлично работает на эмуляторе, но не работает по желанию HTC - PullRequest
0 голосов
/ 18 июля 2011

Я не понимаю проблемы, почему 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

Изображения слишком велики, как с ними справиться? Мне тоже нужны изображения хорошего качества.

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Рекомендуемый способ использования внешнего пути: getExternalStorageDirectory

Измените код на что-то вроде этого.

File f = new File(Environment.getExternalStorageDirectory() + "/DCIM/100MEDIA/");
0 голосов
/ 19 июля 2011

Используйте объект BitmapFactory.Options при декодировании файла.Установите inSampleSize что-то вроде 2 или 4 в зависимости от разрешения экрана, чтобы получить оптимальный предварительный просмотр.Что он делает, так это то, что он уменьшает изображение, чтобы он не занимал слишком много памяти.

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