воскресенье, 27 февраля 2011 г.

"bitmap size exceeds VM budget" и что с этим делать.

Многие, наверное, встречались с подобной ошибкой в процессе разработки своих приложений. Дело в том, что под битмэпы Dalvik (виртуальная машина Java в Android) выделяет всего лишь несколько сот килобайт. В случае, когда работать нужно с внутренними ресурсами приложения это не проблема - можно просто уменьшить размер\разрешение изображений и дело в шляпе.

Но что делать, когда нужно подгрузить картинками\фотографиями из галереи пользователя?
На выручку приходят Options из BitmapFactory.

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(getPath(selectedImageUri), options);

В итоге получим пустой Bitmap, размеры которого соответствуют указанному файлу. Далее все просто:

// обычно нет смысла работать с изображением, большим чем размер экрана
scaleWidth = imageWidth/screenWidth;
scaleHeight = imageHeight/screenHeight;
options.inSampleSize = scaleWidth > scaleHeight ? scaleHeight : scaleWidth;

options.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeFile(getPath(selectedImageUri), options);

Не забываем выставить inJustDecodeBounds в false.

Комментариев нет:

Отправить комментарий