Почему Android BitmapFactory.decodeFile () требует в 4 раза больше памяти? - PullRequest
1 голос
/ 09 июля 2020

У меня 8-мегабайтный png, и когда я пытаюсь загрузить его в Android ImageView, я получаю OutOfMemoryError, в котором говорится, что он пытался выделить 32МБ памяти и потерпел неудачу.

Я работаю над изменением код для уменьшения разрешения изображения, чтобы избежать использования слишком большого количества памяти, чтобы избежать большинства этих проблем, поэтому я не ищу ответов о понижении разрешения. Я пытаюсь понять, почему потребности в памяти изображения превышают размер файла.

Почему Android пытается выделить в 4 раза больше памяти при загрузке png?

Я установил свои параметры, чтобы указать, что он не масштабируется для плотности пикселей:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inScaled = false;

1 Ответ

1 голос
/ 09 июля 2020

Это 2848 x 4209 пикселей

При скорости 4 байта / пиксель для ARGB_8888 это будет 47 948 928 байт как Bitmap.

Размер изображений на диске представляет собой отвлекающий маневр. Основные форматы файлов (особенно PNG и JPEG) сжимаются как файлы. Это не имеет значения. Важны разрешение и битовая глубина желаемого декодированного изображения.

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

...