Изменение размера изображения в Android - PullRequest
14 голосов
/ 10 июля 2010

Я пытаюсь уменьшить размер изображений, получаемых с камеры (около 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.Есть ли более эффективный способ памяти сделать это?Возможно, что-то, что не требует от меня загрузки всего оригинала в память?

Ответы [ 3 ]

16 голосов
/ 11 июля 2010

Когда вы декодируете растровое изображение с помощью BitmapFactory, передайте объект BitmapFactory.Options и укажите inSampleSize. Это лучший способ сэкономить память при декодировании изображения.

Вот пример кода Странно нехватка памяти при загрузке изображения в растровый объект

1 голос
/ 10 июля 2010

Делаете ли вы снимок с камеры в вашем приложении? Если это так, вы должны сначала установить меньший размер изображения, когда они снимаются с помощью android.hardware.Camera.Parameters.setPictureSize

0 голосов
/ 21 апреля 2015

Вот аналогичный вопрос, на который я ответил и покажу, как выполнить динамическую загрузку нужного размера изображения.

исключение из памяти + анализ дампа файла hprof

...