# 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? Oct 7, 2017 at 15:15
• @SebastiánMestre Yes, this was my first thought. Unfortunately it does not replicate the Colorize behavior. Oct 7, 2017 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? Oct 7, 2017 at 23:04