rgbToHsv function

void rgbToHsv(
  1. num r,
  2. num g,
  3. num b,
  4. List<num> hsv,
)

Convert an RGB color to HSV.

Implementation

void rgbToHsv(num r, num g, num b, List<num> hsv) {
  final minCh = min(r, min(g, b));
  final maxCh = max(r, max(g, b));
  final delta = maxCh - minCh;

  if (maxCh == 0 || delta == 0) {
    hsv[0] = 0;
    hsv[1] = 0;
    hsv[2] = 0;
    return;
  }

  num h, s, v;
  v = maxCh;
  s = delta / maxCh; // s

  if (r == maxCh) {
    h = (g - b) / delta; // between yellow & magenta
  } else if (g == maxCh) {
    h = 2 + (b - r) / delta; // between cyan & yellow
  } else {
    h = 4 + (r - g) / delta; // between magenta & cyan
  }
  h *= 60; // degrees
  if (h < 0) {
    h += 360;
  }
  hsv[0] = h;
  hsv[1] = s;
  hsv[2] = v;
}