//RGB(0~1)
public static float[] RGB2HSV(float R, float G, float B)
{
float max = Math.Max(R, Math.Max(G, B));
float min = Math.Min(R, Math.Min(G, B));
float V = max;
float S = (max - min) / max;
float H = 0;
if (R == max)
{
H = (G - B) / (max - min) * 60;
}
if (G == max)
{
H = 120 + (B - R) / (max - min) * 60;
}
if (B == max)
{
H = 240 + (R - G) / (max - min) * 60;
}
if (H < 0)
{
H += 360;
}
return [H, S, V];
}
2.HSV转RGB
public static float[] HSV2RGB(float H, float S, float V)
{
float R = 0, G = 0, B = 0;
if (S == 0)
{
R = G = B = V;
}
else
{
H /= 60;
}
int i = (int)Math.Floor(H);
float f = H - i;
float a = V * (1 - S);
float b = V * (1 - S * f);
float c = V * (1 - S * (1 - f));
switch (i)
{
case 0:
R = V;
G = c;
B = a;