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. [![GIMP's Colorize][1]][1] 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. [1]: https://i.sstatic.net/gDWgl.png