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

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

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

Следующий код показывает, как выглядит весь процесс. Предполагается, что изображение загружено в Bitmap, и проверяется, есть ли у него карта усиления. Если да, код переключает цветовой режим окна на 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, ознакомьтесь со следующими дополнительными ресурсами: