hsvToRgb function
Convert an HSV color to RGB, where h is specified in normalized degrees [0, 360]; s and l are in the range [0, 1]. Returns a list [r, g, b] with values in the range [0, 1].
Implementation
void hsvToRgb(num h, num s, num v, List<num> rgb) {
if (s == 0) {
final g = v.clamp(0, 1);
rgb[0] = g;
rgb[1] = g;
rgb[2] = g;
return;
}
while (h < 0) {
h += 360;
}
while (h > 360) {
h -= 360;
}
h /= 60.0;
final i = h.floor();
final f = h - i;
final p = (v * (1 - s)).clamp(0, 1);
final q = (v * (1 - s * f)).clamp(0, 1);
final t = (v * (1 - s * (1 - f))).clamp(0, 1);
switch (i) {
case 0:
rgb[0] = v;
rgb[1] = t;
rgb[2] = p;
return;
case 1:
rgb[0] = q;
rgb[1] = v;
rgb[2] = p;
return;
case 2:
rgb[0] = p;
rgb[1] = v;
rgb[2] = t;
return;
case 3:
rgb[0] = p;
rgb[1] = q;
rgb[2] = v;
return;
case 4:
rgb[0] = t;
rgb[1] = p;
rgb[2] = v;
return;
default: // case 5
rgb[0] = v;
rgb[1] = p;
rgb[2] = q;
return;
}
}