Формат изображений 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, ознакомьтесь со следующими дополнительными ресурсами:
- Видео: Создание высококачественного мультимедийного опыта для Android
- Пример приложения: отображение Ultra HDR
- Спецификация формата изображения Ultra HDR
- Видео: История разработчика Android: раннее внедрение Ultra HDR в Instagram преобразило пользовательский опыт всего за 3 месяца