[C#]RGBtoHVS
Vector3 RGB2HSV(float r, float g, float b)
{
Vector3 vHVS; //x,y,z;
float min, max, delta;
min = Mathf.Min(r, g, b);
max = Mathf.Max(r, g, b);
vHVS.y = max / 255.0f * 100.0f; // v
delta = max - min;
if (max != 0)
vHVS.z = delta / max * 100.0f; // s
else {
// r = g = b = 0 // s = 0, v is undefined
vHVS.z = 0; //s
vHVS.x = -1; //h
return vHVS;
}
if (r == max)
vHVS.x = (g - b) / delta; // between yellow & magenta //h
else if (g == max)
vHVS.x = 2 + (b - r) / delta; // between cyan & yellow //h
else
vHVS.x = 4 + (r - g) / delta; // between magenta & cyan //h
vHVS.x *= 60; // degrees //h
if (vHVS.x < 0)
vHVS.x += 360; //h
return vHVS;
}
{
Vector3 vHVS; //x,y,z;
float min, max, delta;
min = Mathf.Min(r, g, b);
max = Mathf.Max(r, g, b);
vHVS.y = max / 255.0f * 100.0f; // v
delta = max - min;
if (max != 0)
vHVS.z = delta / max * 100.0f; // s
else {
// r = g = b = 0 // s = 0, v is undefined
vHVS.z = 0; //s
vHVS.x = -1; //h
return vHVS;
}
if (r == max)
vHVS.x = (g - b) / delta; // between yellow & magenta //h
else if (g == max)
vHVS.x = 2 + (b - r) / delta; // between cyan & yellow //h
else
vHVS.x = 4 + (r - g) / delta; // between magenta & cyan //h
vHVS.x *= 60; // degrees //h
if (vHVS.x < 0)
vHVS.x += 360; //h
return vHVS;
}
댓글
댓글 쓰기