色を赤(Red)、緑(Green)、青(Blue)で表現するのがRGBカラーモデル。
Color構造体などはRGBに透過度(Alpha)を加えた4つの要素で値を持っている。
色を色相(Hue)、彩度(Saturation・Chroma)、明度(Value・Lightness・Brightness)で表現するのが
HSVモデル。
RGBとHSVはそれぞれ以下のように変換できる。
RGBからHSVへ変換
public static void RGBtoHSV(float r, float g, float b, out float h, out float s, out float v) { float min = Math.Min(Math.Min(r, g), b); float max = Math.Max(Math.Max(r, g), b); h = max - min; if (0.0f < h) { if (max == r) { h = (g - b) / h; if (h < 0.0f) { h += 6.0f; } } else if (max == g) { h = 2.0f + (b - r) / h; } else { h = 4.0f + (r - g) / h; } } h /= 6.0f; s = (max - min); if (0.0 < max) s /= max; v = max; }
HSVからRGBへ変換
public static void HSVtoRGB(float h, float s, float v, out float r, out float g, out float b) { r = v; g = v; b = v; if (0.0f < s) { h *= 6.0f; int i = (int)h; float f = h - (float)i; switch (i) { default: case 0: g *= 1 - s * (1 - f); b *= 1 - s; break; case 1: r *= 1 - s * f; b *= 1 - s; break; case 2: r *= 1 - s; b *= 1 - s * (1 - f); break; case 3: r *= 1 - s; g *= 1 - s * f; break; case 4: r *= 1 - s * (1 - f); g *= 1 - s; break; case 5: g *= 1 - s; b *= 1 - s * f; break; } } }
コメントをお書きください