/// <summary>
/// Updates the color value in an inherited class.
/// </summary>
protected override void UpdateColor()
{
double c;
double h = Hue * 360.0;
if (Lightness <= 0.5)
{
c = 2.0 * Lightness * Saturation;
}
else
{
c = (2.0 - (2.0 * Lightness)) * Saturation;
}
double min = Lightness - (0.5 * c);
h -= 360.0 * Math.Floor(h / 360.0);
h /= 60.0;
double x = c * (1.0 - Math.Abs(h - (2.0 * Math.Floor(h / 2.0)) - 1.0));
switch ((int)Math.Floor(h))
{
case 0:
default:
Color.R = Quantum.ScaleToQuantum(min + c);
Color.G = Quantum.ScaleToQuantum(min + x);
Color.B = Quantum.ScaleToQuantum(min);
break;
case 1:
Color.R = Quantum.ScaleToQuantum(min + x);
Color.G = Quantum.ScaleToQuantum(min + c);
Color.B = Quantum.ScaleToQuantum(min);
break;
case 2:
Color.R = Quantum.ScaleToQuantum(min);
Color.G = Quantum.ScaleToQuantum(min + c);
Color.B = Quantum.ScaleToQuantum(min + x);
break;
case 3:
Color.R = Quantum.ScaleToQuantum(min);
Color.G = Quantum.ScaleToQuantum(min + x);
Color.B = Quantum.ScaleToQuantum(min + c);
break;
case 4:
Color.R = Quantum.ScaleToQuantum(min + x);
Color.G = Quantum.ScaleToQuantum(min);
Color.B = Quantum.ScaleToQuantum(min + c);
break;
case 5:
Color.R = Quantum.ScaleToQuantum(min + c);
Color.G = Quantum.ScaleToQuantum(min);
Color.B = Quantum.ScaleToQuantum(min + x);
break;
}
}