Редактирование изображений 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-интерфейсы 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, посетите следующие дополнительные ресурсы: