Отображение изображений 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 или более поздней версии.)

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

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