# How can I implement GIMP's “Colorize” function?

I have an RGB pixel that I'd like to colorize in my program (I'm using GLSL) very similar to how the GIMP "Colors > Colorize" function works.

In my program, I can easily convert between RGB and HSV. I can therefore get:

pix_h, pix_s, pix_v


And I also define the inputs of the colorize function as:

col_h, col_s, col_v


What calculations can I perform to determine the output pixel hsv?

I think I can get:

out_h = col_h


But I'm a little lost on how to calculate output saturation and value.

EDIT: Where lum is the luminance of the input pixel:

out_s = clamp( (1 - pix_v) * 2, 0, 1)

out_v = clamp( pix_v * 2, 0, 1)


seems to produce good results when colorize inputs S=1 ([0, 1]) and V=.5 ([0, 1]). I'm still struggling to generalize these formulas for when S!=1 and V!=.5.

• Have you tried out_s = col_s and out_v = in_v? – Sebastián Mestre Oct 7 '17 at 15:15
• @SebastiánMestre Yes, this was my first thought. Unfortunately it does not replicate the Colorize behavior. – carlr Oct 7 '17 at 16:53
• Isn't the colorize function kinda operating on the HSL space instead of HSV? What if you convert directly into HSL then what the above person said would work? – gallickgunner Oct 7 '17 at 23:04