HSVのような空間で働きたいと思います。特に、価値 (V) に関心があります。RGB から HSV/HSL およびその逆に変換する式については、このリンクを参照してください。コードは JavaScript ですが、C に変換するのは基本的なことです。
http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c
考慮すべきもう 1 つの点は、輝度 (Y) と輝度 (Y') です。私は通常、次の式を輝度に使用します。
http://en.wikipedia.org/wiki/Luminance_%28relative%29
Y = 0.2126 R + 0.7152 G + 0.0722 B
V、Y、または Y' のどれを使用するのが最適かわかりません。ウィキによると、「明度または値の次元の定義はあまり明白ではありません。表現の目的と目標に応じて、いくつかの可能性があります。」 http://en.wikipedia.org/wiki/HSL_and_HSV#Lightness
私は Y を使用しています。Y と Y' の違いは、ガンマ補正によるものです。きちんと計算すればどちらでも使えると思います。しかし、コントラストと明るさのために単に V を使用することもできます。
最後に、ガンマ補正を考慮することに注意してください。
編集:プロセスがどのように進むと思うかを概説させてください.
- 色成分を float に変換する
- 色が sRGB (非線形) の場合は、RGB (線形) に変換します。
- RGB を HSV に変換する
- 値 (V) をスケーリングして明るさを変更します。コントラストのために彩度(S)も変更します。
- RGB に戻す
- 必要に応じて RGB を sRGB に変換します。
- 色成分を範囲 [0,255] に戻します。