private void ToHLS()
{
byte minval = Math.Min(red, Math.Min(green, blue));
byte maxval = Math.Max(red, Math.Max(green, blue));
float mdiff = (float)(maxval - minval);
float msum = (float)(maxval + minval);
luminance = msum / 510.0f;
if (maxval == minval)
{
saturation = 0.0f;
hue = 0.0f;
}
else
{
float rnorm = (maxval - red) / mdiff;
float gnorm = (maxval - green) / mdiff;
float bnorm = (maxval - blue) / mdiff;
saturation = (luminance <= 0.5f) ? (mdiff / msum) : (mdiff /
(510.0f - msum));
if (red == maxval)
{
hue = 60.0f * (6.0f + bnorm - gnorm);
}
if (green == maxval)
{
hue = 60.0f * (2.0f + rnorm - bnorm);
}
if (blue == maxval)
{
hue = 60.0f * (4.0f + gnorm - rnorm);
}
if (hue > 360.0f)
{
hue = hue - 360.0f;
}
}
}