protected override void UpdateValue()
{
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:
Value.R = (QuantumType)(Quantum.Max * (min + c));
Value.G = (QuantumType)(Quantum.Max * (min + x));
Value.B = (QuantumType)(Quantum.Max * min);
break;
case 1:
Value.R = (QuantumType)(Quantum.Max * (min + x));
Value.G = (QuantumType)(Quantum.Max * (min + c));
Value.B = (QuantumType)(Quantum.Max * min);
break;
case 2:
Value.R = (QuantumType)(Quantum.Max * min);
Value.G = (QuantumType)(Quantum.Max * (min + c));
Value.B = (QuantumType)(Quantum.Max * (min + x));
break;
case 3:
Value.R = (QuantumType)(Quantum.Max * min);
Value.G = (QuantumType)(Quantum.Max * (min + x));
Value.B = (QuantumType)(Quantum.Max * (min + c));
break;
case 4:
Value.R = (QuantumType)(Quantum.Max * (min + x));
Value.G = (QuantumType)(Quantum.Max * min);
Value.B = (QuantumType)(Quantum.Max * (min + c));
break;
case 5:
Value.R = (QuantumType)(Quantum.Max * (min + c));
Value.G = (QuantumType)(Quantum.Max * min);
Value.B = (QuantumType)(Quantum.Max * (min + x));
break;
default:
Value.R = 0;
Value.G = 0;
Value.B = 0;
break;
}
}