rgbToHsv function

List<num?> rgbToHsv(
  1. num r,
  2. num g,
  3. num b
)

Implementation

List<num?> rgbToHsv(num r, num g, num b) {
  r /= 255;
  g /= 255;
  b /= 255;

  num _max = max(
    r,
    max(g, b),
  );
  num _min = min(
    r,
    max(g, b),
  );
  num? h, s, v = _max;

  num d = _max - _min;
  s = _max == 0 ? 0 : d / _max;

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

  h = h ?? 0 / 6;

  return [h, s, v];
}