rgbToHsb function

List<double> rgbToHsb(
  1. double r,
  2. double g,
  3. double b
)

Implementation

List<double> rgbToHsb(double r, double g, double b) {
  double hue = 0;

  r = r / 255;
  g = g / 255;
  b = b / 255;
  double max = math.max(math.max(r, g), b);
  double min = math.min(math.min(r, g), b);
  double brightness = max;
  double delta = max - min;
  double saturation = max == 0 ? 0 : delta / max;

  if (max == min) {
    hue = 0; // achromatic
  } else {
    if (max == r) {
      hue = (g - b) / delta + (g < b ? 6 : 0);
    } else if (max == g) {
      hue = (b - r) / delta + 2;
    } else if (max == b) {
      hue = (r - g) / delta + 4;
    }
    hue /= 6;

    // switch (max) {
    //   case r:
    //     hue = (g - b) / delta + (g < b ? 6 : 0)
    //     break
    //   case g:
    //     hue = (b - r) / delta + 2
    //     break
    //   case b:
    //     hue = (r - g) / delta + 4
    //     break
    // }
    // hue /= 6
  }
  return [hue, saturation, brightness];
}