toHslColor method

HslColor toHslColor()
override

Implementation

HslColor toHslColor() {
  num rf = r / 255;
  num gf = g / 255;
  num bf = b / 255;
  num cMax = [rf, gf, bf].reduce(max);
  num cMin = [rf, gf, bf].reduce(min);
  num delta = cMax - cMin;
  num hue;
  num saturation;
  num luminance;

  if (cMax == rf) {
    hue = 60 * ((gf - bf) / delta % 6);
  } else if (cMax == gf) {
    hue = 60 * ((bf - rf) / delta + 2);
  } else {
    hue = 60 * ((rf - gf) / delta + 4);
  }

  if (hue.isNaN || hue.isInfinite) {
    hue = 0;
  }

  luminance = (cMax + cMin) / 2;

  if (delta == 0) {
    saturation = 0;
  } else {
    saturation = delta / (1 - (luminance * 2 - 1).abs());
  }

  return new HslColor(hue, saturation * 100, luminance * 100);
}