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

The Ultra HDR image format lets images store more information about the intensity of light, resulting in more detailed highlights and shadows, and more intense colors. Android provides support for Ultra HDR images beginning with Android 14 (API level 34). If your app is running on those versions, it's important to configure your app to display these images properly. On the other hand, if your app isn't displaying Ultra HDR images, you can save device resources by not enabling Ultra HDR display. This page explains how to check whether graphics support Ultra HDR, and how to display them properly.

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

Изображения Ultra HDR содержат карту усиления . Карта усиления используется для определения повышенной яркости каждого пикселя изображения. Чтобы проверить, находится ли изображение в формате Ultra HDR, преобразуйте изображение или ресурс drawable в 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

Java

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, ознакомьтесь со следующими дополнительными материалами: