using System.Windows.Media; namespace ColorPicker { public class ColorConverter { public static Color HSLtoRGB(double hue, double saturation, double luminance) { int Max, Mid, Min; double q; Max = Round(luminance * 255); Min = Round((1.0 - saturation) * (luminance / 1.0) * 255); q = (double)(Max - Min) / 255; if (hue >= 0 && hue <= (double)1 / 6) { Mid = Round(((hue - 0) * q) * 1530 + Min); return Color.FromArgb(255, (byte)Max, (byte)Mid, (byte)Min); } else if (hue <= (double)1 / 3) { Mid = Round(-((hue - (double)1 / 6) * q) * 1530 + Max); return Color.FromArgb(255, (byte)Mid, (byte)Max, (byte)Min); } else if (hue <= 0.5) { Mid = Round(((hue - (double)1 / 3) * q) * 1530 + Min); return Color.FromArgb(255, (byte)Min, (byte)Max, (byte)Mid); } else if (hue <= (double)2 / 3) { Mid = Round(-((hue - 0.5) * q) * 1530 + Max); return Color.FromArgb(255, (byte)Min, (byte)Mid, (byte)Max); } else if (hue <= (double)5 / 6) { Mid = Round(((hue - (double)2 / 3) * q) * 1530 + Min); return Color.FromArgb(255, (byte)Mid, (byte)Min, (byte)Max); } else if (hue <= 1.0) { Mid = Round(-((hue - (double)5 / 6) * q) * 1530 + Max); return Color.FromArgb(255, (byte)Max, (byte)Min, (byte)Mid); } else { return Color.FromArgb(255, (byte)0, (byte)0, (byte)0); } } private static int Round(double val) { int ret_val = (int)val; int temp = (int)(val * 100); if ((temp % 100) >= 50) { ret_val += 1; } return ret_val; } } }