hsvToRgb function

void hsvToRgb(
  1. num h,
  2. num s,
  3. num v,
  4. List<num> rgb,
)

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;
  }
}