Формат изображений Ultra HDR кодирует информацию о яркости, которая позволяет устройствам отображать более яркие изображения с более насыщенными цветами. При редактировании изображения Ultra HDR вашим приложением необходимо убедиться, что эта информация о яркости сохранена. Это важно, даже если устройство пользователя не поддерживает отображение изображения Ultra HDR с полной интенсивностью. В конце концов, пользователь может поделиться своим изображением с кем-то, у кого есть устройство, поддерживающее Ultra HDR, или сохранить это изображение и посмотреть на него снова на новом устройстве спустя годы.
Хорошая новость в том, что большинство способов редактирования растровых изображений в Android поддерживают формат Ultra HDR. Если вы вносите простые изменения в изображение, например, обрезаете или поворачиваете его, стандартные методы Android справятся с задачей — в результате вы получите изображение Ultra HDR с новыми размерами или ориентацией.
Задача усложняется, если вы изменяете содержимое изображения. В таких случаях стандартные методы редактирования сохраняют информацию о яркости старого изображения, что может быть нежелательно. В подобных ситуациях может потребоваться отредактировать или удалить карту усиления (которая кодирует информацию о яркости изображения), чтобы получить нужный результат.
Обзор формата Ultra HDR
Формат изображения Ultra HDR подробно описан в спецификации изображения Ultra HDR . Самое важное, что нужно понимать, это то, что изображение Ultra HDR содержит как основное изображение , так и карту усиления .
- Основное изображение содержит информацию о цвете каждого пикселя изображения.
- Карта усиления представляет собой стандартное изображение JPEG с теми же пропорциями, что и основное изображение, хотя и не обязательно с теми же размерами пикселей. Каждый пиксель карты усиления определяет яркость соответствующей части основного изображения.
Карта усиления может быть как в оттенках серого, так и в цвете. Если карта усиления цветная, каждый цветовой канал на ней определяет яркость этого цветового канала на соответствующей части основного изображения. Если карта усиления в оттенках серого, каждый пиксель на ней определяет яркость всех трех цветовых каналов на этой части основного изображения.
Карта усиления должна иметь те же пропорции, что и основное изображение, но не обязательно иметь те же размеры в пикселях. Фактически, когда платформа Android создает изображения Ultra HDR, она создает карту усиления с меньшей шириной и высотой, чем основное изображение; это значительно уменьшает размер файла, но при этом кодирует достаточно информации для получения хорошего результата. Это означает, что каждый пиксель в карте усиления может хранить информацию о яркости для нескольких пикселей основного изображения.
Базовая обработка Ultra HDR
Если вы используете API Android Bitmap для выполнения базовых преобразований изображения Ultra HDR, соответствующие методы внесут необходимые изменения в карту усиления. Поддерживаются следующие операции Bitmap :
- Поворот: При повороте изображения Ultra HDR метод также поворачивает карту усиления.
- Обрезка: При обрезке изображения Ultra HDR метод соответствующим образом обрезает карту усиления.
- Масштабирование: При масштабировании изображения Ultra HDR метод масштабирует карту усиления таким образом, чтобы она имела половину ширины и половину высоты измененного основного изображения.
В каждом случае информация о светимости сохраняется.
Расширенные возможности редактирования Ultra HDR
При внесении более сложных изменений в изображение Ultra HDR карта усиления сохраняется без изменений, что может не дать желаемого результата.
К числу распространенных действий, которые могут привести к подобной ситуации, относятся:
- Добавление стикеров или эмодзи: добавленный стикер будет иметь те же значения яркости и насыщенности цвета, что и область, на которую он был наклеен.
- Наложение второго изображения: новое изображение будет использовать информацию о яркости и насыщенности цвета накладываемого на него контента.
- Добавление фильтров: информация из старой карты усиления может быть непригодна для измененного основного изображения.
В каждом случае сохраняется старая информация о яркости и насыщенности цвета, но она может быть непригодна для измененного изображения.
Если исходная карта усиления подходит для отредактированного изображения, вам ничего делать не нужно. Если же вы хотите изменить карту усиления, обычный порядок действий следующий:
- Получите текущую карту усиления изображения , вызвав метод
Bitmap.getGainmap(), и сохраните её в кэше. - При желании измените основное изображение.
Внесите соответствующие изменения в кэшированную карту усиления. Например, если вы вставили эмодзи на основное изображение, вы можете установить соответствующую часть карты усиления на нейтральное значение, например,
Color.GRAY.Примените измененную карту усиления обратно к изображению , вызвав метод
Bitmap.setGainmap().
Дополнительные ресурсы
Чтобы узнать больше об изображениях Ultra HDR, ознакомьтесь со следующими дополнительными материалами: