色を赤(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;
}
}
}

コメント
コメントを投稿