Intereting Posts
Использование вложенного фрагмента и объекта аниматора рядом Бирманская речь для преобразования текста в андроид? Imageview задает цветной фильтр для градиента Android – исключая ключ api из github, где хранить ключ api в коде? Странное поведение тени во время флип-карты Как настроить Spinner в Android Тестирование того, что admob работает перед публикацией ViewPager внутри фрагмента теряет содержимое при возврате к нему Как измеряется точность определения местоположения в Android? Как я могу получить событие в Android Spinner, когда выбранный выбранный элемент снова выбран? Нужна ли проверка выполнения во время выполнения для записи в путь getExternalFilesDir () в зефире? Соединение было отказано при попытке подключиться к моему серверу REST с эмулятора Android Как обмениваться ресурсами между модульным тестом и контрольно-измерительным тестом в андроиде? Android Sqlite – ошибка «Нет такой таблицы» Текстовая левая сторона RadioButton с запасом на Android

Изменение размера изображения с высокой эффективностью в Android

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

Solutions Collecting From Web of "Изменение размера изображения с высокой эффективностью в Android"

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

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

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

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

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