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

14
задан Sionide21 10 July 2010 в 15:00
поделиться

2 ответа

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

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

16
ответ дан 1 December 2019 в 13:47
поделиться

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

1
ответ дан 1 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: