Skip to content

Instantly share code, notes, and snippets.

@sqybi
Created March 28, 2013 13:31
Show Gist options
  • Save sqybi/5263137 to your computer and use it in GitHub Desktop.
Save sqybi/5263137 to your computer and use it in GitHub Desktop.
Convert HSL color (h: 0-360; s, l: 0-1) to RGB (0-255)
private Tuple<int, int, int> HslToRgb(Tuple<double, double, double> hsl)
{
double h = hsl.Item1;
double s = hsl.Item2;
double l = hsl.Item3;
int r = 0, g = 0, b = 0;
double q, p, hk, t, c;
// set q
if (l < 0.5)
{
q = l * (1 + s);
}
else
{
q = l + s - l * s;
}
// set p
p = 2 * l - q;
// set hk
hk = h / 360;
// for each color (0: R; 1: G; 2: B)
for (int i = 0; i < 3; ++i)
{
// set t
t = hk + (1.0 - i) / 3;
if (t < 0)
{
t += 1;
}
if (t > 1)
{
t -= 1;
}
// set c
if (t < 1.0 / 6)
{
c = p + (q - p) * 6 * t;
}
else if (t < 1.0 / 2)
{
c = q;
}
else if (t < 2.0 / 3)
{
c = p + (q - p) * 6 * (2.0 / 3 - t);
}
else
{
c = p;
}
c = Math.Truncate(c * 255);
if (i == 0)
{
r = Convert.ToInt32(c);
}
else if (i == 1)
{
g = Convert.ToInt32(c);
}
else
{
b = Convert.ToInt32(c);
}
}
return Tuple.Create<int, int, int>(r, g, b);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment