public static HSV RGBtoHSV(ARGB argb)
{
double h, s;
var r = (double)argb.Red / 255;
var g = (double)argb.Green / 255;
var b = (double)argb.Blue / 255;
var min = Math.Min(Math.Min(r, g), b);
var max = Math.Max(Math.Max(r, g), b);
var v = max;
var delta = max - min;
if (Equals(max, 0.0d) || Equals(delta, 0.0d))
{
s = 0;
h = 0;
}
else
{
s = delta / max;
if (Equals(r, max))
h = (g - b) / delta;
else if (Equals(g, max))
h = 2 + (b - r) / delta;
else
h = 4 + (r - g) / delta;
}
h *= 60;
if (h < 0)
h += 360;
return new HSV(argb.Alpha, (int)(h / 360 * 255), (int)(s * 255), (int)(v * 255));
}