Как редактировать изображения Ultra HDR

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

  • Поворот. Если вы поворачиваете изображение Ultra HDR, метод также поворачивает карту усиления.
  • Кадрирование. Если вы кадрируете изображение Ultra HDR, метод соответствующим образом кадрирует карту усиления.
  • Масштабирование. Если вы масштабируете изображение Ultra HDR, метод масштабирует карту усиления так, чтобы ее ширина и высота составляли половину ширины и высоты измененного основного изображения.

В обоих случаях информация о яркости сохраняется.

Расширенное редактирование Ultra HDR

Если вы внесете в изображение Ultra HDR более сложные изменения, карта усиления останется неизменной, что может не дать желаемых результатов.

Вот несколько примеров:

  • Добавление стикеров или эмодзи. Добавленный стикер будет иметь те же значения яркости и насыщенности цвета, что и область, на которую он был вставлен.
  • Наложение второго изображения. Новое изображение будет использовать информацию о яркости и насыщенности цветов контента, на который оно накладывается.
  • Добавление фильтров. Информация из старой карты усиления может не подходить для измененного основного изображения.

В каждом случае сохраняется старая информация о яркости и насыщенности цвета, но она может не подходить для измененного изображения.

Если исходная карта усиления подходит для отредактированного изображения, ничего делать не нужно. Если вы хотите изменить карту усиления, обычно это делается так:

  1. Получите текущую карту усиления изображения, вызвав Bitmap.getGainmap(), и сохраните ее в кеше.
  2. Измените основное изображение.
  3. Внесите соответствующие изменения в кешированную карту усиления. Например, если вы вставили эмодзи в основное изображение, то можете задать для соответствующей части карты усиления нейтральное значение, например Color.GRAY.

  4. Примените измененную карту усиления к изображению, вызвав Bitmap.setGainmap().

Дополнительные ресурсы

Дополнительную информацию об изображениях Ultra HDR можно найти в следующих ресурсах: