Отображение изображений Ultra HDR

Формат изображения Ultra HDR позволяет изображениям хранить больше информации об интенсивности света, что приводит к более детальным бликам и теням, а также к более насыщенным цветам. Android обеспечивает поддержку изображений Ultra HDR, начиная с Android 14 (уровень API 34). Если ваше приложение работает в этих версиях, важно настроить его для правильного отображения этих изображений. С другой стороны, если ваше приложение не отображает изображения Ultra HDR, вы можете сэкономить ресурсы устройства, не включив отображение Ultra HDR. На этой странице объясняется, как проверить, поддерживает ли графика Ultra HDR, и как правильно ее отображать.

Графика, показывающая симуляцию разницы между стандартным динамическим диапазоном и расширенным динамическим диапазоном. На рисунке изображен пейзаж с облачным небом. Правая половина, имитирующая HDR, имеет более яркие блики, более темные тени и более четкие цвета.
Рисунок 1. Моделирование разницы между изображениями со стандартным динамическим диапазоном (SDR) и изображениями с расширенным динамическим диапазоном (HDR). Если устройство поддерживает HDR, изображения могут иметь более темные тени и более яркие светлые участки.

Проверка наличия карты усиления

Изображения Ultra HDR содержат карту усиления . Карта усиления используется для определения повышенной яркости каждого пикселя изображения. Чтобы проверить, находится ли изображение в формате Ultra HDR, преобразуйте изображение или рисуемый объект в Bitmap и вызовите Bitmap.hasGainMap() (доступно начиная с Android 14), чтобы проверить, есть ли у него карта усиления.

Настройте свое окно для отображения Ultra HDR

Чтобы отображать изображения Ultra HDR с полным динамическим диапазоном, установите цветовой режим окна ActivityInfo.COLOR_MODE_HDR . Сделайте это, вызвав метод окна setColorMode() . (Эти API доступны начиная с Android 8; однако изображения не отображаются в формате Ultra HDR, если на устройстве не установлена ​​ОС Android 14 или более поздней версии.)

Собираем все это вместе

Следующий код показывает, как выглядит весь процесс. Этот код предполагает, что изображение загружено в растровое изображение, и проверяет, имеет ли изображение карту усиления. Если это так, код переключает цветовой режим окна на COLOR_MODE_HDR . Если изображение не имеет карты усиления, код переключает окно в цветовой режим по умолчанию.

Котлин

val bitmap = /* Get Bitmap from Image Resource */
binding.imageContainer.setImageBitmap(bitmap)

// Set color mode of the activity to the correct color mode.
requireActivity().window.colorMode =
   if (bitmap.hasGainmap()) ActivityInfo.COLOR_MODE_HDR else ActivityInfo.COLOR_MODE_DEFAULT

Ява

final Bitmap bitmap = /* Get Bitmap from Image Resource */
binding.imageContainer.setImageBitmap(bitmap);

// Set color mode of the activity to the correct color mode.
int colorMode = ActivityInfo.COLOR_MODE_DEFAULT;
if (bitmap.hasGainmap()) colorMode = ActivityInfo.COLOR_MODE_HDR;
requireActivity().getWindow().setColorMode(colorMode);

Дополнительные ресурсы

Чтобы узнать больше об изображениях Ultra HDR, посетите следующие дополнительные ресурсы: