hslToRgb function
Convert an HSL color to RGB, where h is specified in normalized degrees [0, 1] (where 1 is 360-degrees); s and l are in the range [0, 1]. Returns a list [r, g, b] with values in the range [0, 255].
Implementation
List<int> hslToRgb(num hue, num saturation, num lightness) {
if (saturation == 0) {
final gray = (lightness * 255.0).toInt();
return [gray, gray, gray];
}
num hue2rgb(num p, num q, num t) {
if (t < 0.0) {
t += 1.0;
}
if (t > 1) {
t -= 1.0;
}
if (t < 1.0 / 6.0) {
return p + (q - p) * 6.0 * t;
}
if (t < 1.0 / 2.0) {
return q;
}
if (t < 2.0 / 3.0) {
return p + (q - p) * (2.0 / 3.0 - t) * 6.0;
}
return p;
}
final q = lightness < 0.5
? lightness * (1.0 + saturation)
: lightness + saturation - lightness * saturation;
final p = 2.0 * lightness - q;
final r = hue2rgb(p, q, hue + 1.0 / 3.0);
final g = hue2rgb(p, q, hue);
final b = hue2rgb(p, q, hue - 1.0 / 3.0);
return [(r * 255.0).round(), (g * 255.0).round(), (b * 255.0).round()];
}