Программно, как смешивание оттенков работает в фотошопе?

В Photoshop вы можете установить режим наложения слоя на "Hue". Если этот слой, например, заполнен синим цветом, то он, кажется, берет слой ниже и делает его синим везде, где существует небелый цвет.

Мне интересно, что он на самом деле делает, хотя. Если у меня есть фоновый слой с пикселем aarrggbb, а поверх него установлен режим смешивания "Hue", и на этом слое есть пиксель aarrggbb, как эти два значения объединяются, чтобы получить результат, который мы видим?

Это не просто сбросить rrggbb со слоя ниже. Если бы он это сделал, он бы тоже покрасил в белый и черный. Это также не позволит цветным вариациям.

Если фоновый пиксель равен 0xff00ff00, а соответствующий пиксель слоя оттенка равен 0xff0000ff, то я предполагаю, что конечный результат будет просто 0xff0000ff, потому что синий ff заменяет зеленый ff. Но, если фоновый пиксель равен 0x55112233, а пиксель слоя оттенка - 0xff0000ff, как он получится с оттенком синего, который он имеет?

Причина, по которой я спрашиваю, состоит в том, что я хотел бы делать различные изображения и программно менять цвет изображения в моем приложении. Вместо того, чтобы хранить 8 разных версий одного и того же изображения с разными цветами, я хотел бы сохранить одно изображение и раскрасить его по мере необходимости.

2 ответа

Решение

Я нашел алгоритм для преобразования RGB в HSV здесь: http://www.cs.rit.edu/~ncs/color/t_convert.html

Конечно, в нижней части этой страницы упоминается, что у объекта Java Color уже есть методы для преобразования между RGB и HSV, поэтому я просто использовал это.

Я искал способ воспроизвести этот режим смешивания в javascript/canvas, но я только придумал режим "colorize" фильтра / смешивания. (Примеры ниже)

Алгоритмраскраски:

  1. преобразовать цвета из RGB в HSL;
  2. измените значение Hue на желаемое (в моем случае 172⁰ или 0.477);
  3. вернуть обновление HSL в RGB

Примечание: это нормально на рабочем столе, но на смартфоне это заметно медленно, я обнаружил.

Вы можете увидеть разницу, сравнив эти три изображения. Оригинал:

исходное изображение

раскрасить:

результат с моим алгоритмом

Алгоритм фейерверка "оттенок наложения" (который, я думаю, такой же, как в Photoshop):

Фейерверк

Фильтр colorize может быть хорошей заменой.

Вопрос преобразования RGB/HSL

Hue/Chroma и HSL в Википедии

Другие вопросы по тегам