Загрузка ресурсов изображения в виде RGB 565

Я пытаюсь снизить использование памяти в своем приложении, и я заметил, что большинство из них вызвано фонами деятельности: в XHDPI, 720 * 1280 * 4 = 3,6 Мбайт каждый, и Android, похоже, не выпускает их как Как только они больше не используются.

Есть ли способ сказать Android загрузить определенные изображения ресурсов как RGB 565 вместо RGB 8888 , чтобы сохранить некоторую память на этих больших изображениях без альфа-канала?

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

Solutions Collecting From Web of "Загрузка ресурсов изображения в виде RGB 565"

Вы можете сделать это следующим образом:

 protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.high_scores); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inPreferredConfig = Config.RGB_565; BitmapDrawable highScoresBg = BitmapFactory.decodeResource(getResources(), R.drawable.achievements, opts); findViewById(R.id.high_scores_root).setBackgroundDrawable(highScoresBg); 

Пиксели вашего изображения будут сохранены на 2 байта, а не 4 при использовании ARGB_8888. 50% сохраненная память, но, конечно, менее качественная.

В этой статье говорится, что на Android <2.3 изображения по умолчанию находятся в RGB_565. Однако, если изображение имеет альфа-канал (например, PNG), он будет загружен в ARGB_8888. На Android> = 2.3 все изображения загружаются по умолчанию в ARGB_8888.

В настоящее время невозможно указать ресурс RGB_565.

Лучшее, что вы могли бы сделать, – предоставить следующий файл данных, который отображает ваши файлы изображений в нужные форматы в памяти. Во время загрузки вы можете проверить каждый идентификатор ресурса на файл, чтобы определить, хотите ли вы установить параметры BitmapFactory на 565 или 8888.

Подобный процесс используется большинством приложений, которые вынимают данные изображения. Например, некоторые изображения JPG, которые имеют малую разрешающую способность, считаются эскизами и загружаются в память с использованием пути 565. Когда полноэкранным JPG разрешено загружать в память как 8888.

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