Редактирование изображений Ultra HDR

Формат изображения Ultra HDR кодирует информацию о яркости, что позволяет устройствам отображать более яркие изображения с более насыщенными цветами. Когда ваше приложение редактирует изображение Ultra HDR, необходимо сохранить эту информацию о яркости. Это важно, даже если устройство пользователя не поддерживает отображение изображения Ultra HDR на полной яркости. В конце концов, пользователь может поделиться своим изображением с кем-то, у кого есть устройство с поддержкой Ultra HDR, или сохранить его и посмотреть снова на новом устройстве спустя годы.

Хорошая новость заключается в том, что большинство методов редактирования растровых изображений в Android поддерживают формат изображений Ultra HDR. Если вы вносите базовые изменения в изображение, например, кадрируете или поворачиваете его, стандартные методы Android справятся с этой задачей — вы получите изображение Ultra HDR с новыми размерами или ориентацией.

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

Обзор формата Ultra HDR

Формат изображения Ultra HDR подробно описан в спецификации Ultra HDR Image . Важно понимать, что изображение Ultra HDR содержит как основное изображение , так и карту усиления .

  • Основное изображение содержит информацию о цвете каждого пикселя изображения.
  • Карта усиления представляет собой стандартное JPEG-изображение с теми же пропорциями, что и у основного изображения, но не обязательно с тем же размером пикселей. Каждый пиксель карты усиления определяет яркость соответствующей области основного изображения.

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

Карта усиления должна иметь те же пропорции, что и первичное изображение, но не обязательно иметь те же размеры в пикселях. Фактически, когда платформа Android создаёт изображения Ultra HDR, она создаёт карту усиления с меньшей шириной и высотой, чем первичное изображение. Это значительно уменьшает размер файла, но при этом кодирует достаточно информации для хорошего результата. Это означает, что каждый пиксель карты усиления может хранить информацию о яркости нескольких пикселей первичного изображения.

Базовые возможности редактирования Ultra HDR

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