Я пересмотрел вычисление для , когда флажок "Colorize" установлен . Весь код ниже псевдокод .
Входные данные:
- hueRGB , который является RGB-цветом для
HSV(photoshop_hue, 100, 100).ToRGB()
- насыщенность , что составляет
photoshop_saturation / 100.0
(т. Е. 0..1)
- легкость , что составляет
photoshop_lightness / 100.0
(т.е. -1..1)
- значение , то есть
pixel.ToHSV().Value
, масштабированное до диапазона 0..1.
Метод раскраски одного пикселя:
color = blend2(rgb(128, 128, 128), hueRGB, saturation);
if (lightness <= -1)
return black;
else if (lightness >= 1)
return white;
else if (lightness >= 0)
return blend3(black, color, white, 2 * (1 - lightness) * (value - 1) + 1)
else
return blend3(black, color, white, 2 * (1 + lightness) * (value) - 1)
Где blend2
и blend3
:
blend2(left, right, pos):
return rgb(left.R * (1-pos) + right.R * pos, same for green, same for blue)
blend3(left, main, right, pos):
if (pos < 0)
return blend2(left, main, pos + 1)
else if (pos > 0)
return blend2(main, right, pos)
else
return main