Изменение размера снимка в Android
Я пытаюсь уменьшить размер изображений, извлеченных из камеры (так ~ 5-8 мегапикселей), до одного меньшего размера (самый крупный из которых - 1024x768). Я пробовал следующий код, но я последовательно получаю OutOfMemoryError
.
Bitmap image = BitmapFactory.decodeStream(this.image, null, opt);
int imgWidth = image.getWidth();
int imgHeight = image.getHeight();
// Constrain to given size but keep aspect ratio
float scaleFactor = Math.min(((float) width) / imgWidth, ((float) height) / imgHeight);
Matrix scale = new Matrix();
scale.postScale(scaleFactor, scaleFactor);
final Bitmap scaledImage = Bitmap.createBitmap(image, 0, 0, imgWidth, imgHeight, scale, false);
image.recycle();
Похоже, что OOM происходит во время createBitmap
. Есть ли более эффективный способ памяти для этого? Возможно, что-то, что не требует от меня загрузки всего оригинала в память?
Ответы
Ответ 1
Когда вы декодируете растровое изображение с помощью BitmapFactory, перейдите в объект BitmapFactory.Options и укажите inSampleSize. Это лучший способ сохранить память при декодировании изображения.
Вот пример кода Странная проблема с памятью при загрузке изображения в объект Bitmap
Ответ 2
Вы делаете снимок с помощью камеры в своем приложении? Если это так, вы должны установить размер изображения на меньший, в первую очередь, когда они захватываются с помощью android.hardware.Camera.Parameters.setPictureSize
Ответ 3
Вот аналогичный вопрос, на который я ответил, и показать, как динамически загружать правильный размер изображения.
исключение из памяти + анализ дампа файла hprof