2010-07-10 4 views
14

Я пытаюсь уменьшить размер изображений, полученных из камеры (так ~ 5-8 мегапикселей), до одного меньшего размера (наибольший из которых - 1024x768). Я пробовал следующий код, но я последовательно получаю OutOfMemoryError.Эффективное изменение размера изображения в Android

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

ответ

16

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

Вот пример кода Strange out of memory issue while loading an image to a Bitmap object

1

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

+0

Нет, я использую 'android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI', чтобы позволить пользователю выбрать изображение. – Sionide21

Смежные вопросы