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