Color ToRGB()
{
// convert to RGB according to
// "Conversion from HSL to RGB"
double r = m_lightness;
double g = m_lightness;
double b = m_lightness;
if (m_saturation == 0)
return Color.FromArgb(255, (int)(r*255), (int)(g*255), (int)(b*255));
double q = 0;
if (m_lightness < 0.5)
q = m_lightness * (1 + m_saturation);
else
q = m_lightness + m_saturation - (m_lightness * m_saturation);
double p = 2 * m_lightness - q;
double hk = m_hue / 360;
// r,g,b colors
double[] tc = new double[3] { hk + (1d/3d), hk, hk-(1d/3d)};
double[] colors = new double[3] {0, 0, 0};
for (int color = 0; color < colors.Length; color++)
{
if (tc[color] < 0)
tc[color] += 1;
if (tc[color] > 1)
tc[color] -= 1;
if (tc[color] < (1d/6d))
colors[color] = p + ((q-p)*6*tc[color]);
else
if (tc[color] >= (1d/6d) && tc[color] < (1d/2d))
colors[color] = q;
else
if (tc[color] >= (1d/2d) && tc[color] < (2d/3d))
colors[color] = p + ((q-p)*6*(2d/3d - tc[color]));
else
colors[color] = p;
colors[color] *= 255; // convert to value expected by Color
}
return Color.FromArgb(255, (int)colors[0], (int)colors[1], (int)colors[2]);
}