getHSL method

HslData getHSL(
  1. HslData target, [
  2. String colorSpace = LinearSRGBColorSpace
])

Implementation

HslData getHSL(HslData target, [String colorSpace = LinearSRGBColorSpace]) {
  // h,s,l ranges are in 0.0 - 1.0
  ColorManagement.fromWorkingColorSpace(toComponents(this, _rgb), colorSpace);

  double r = _rgb.r, g = _rgb.g, b = _rgb.b;

  double max = Math.max3(r, g, b).toDouble();
  double min = Math.min3(r, g, b).toDouble();

  double hue, saturation;
  double lightness = (min + max) / 2.0;

  if (min == max) {
    hue = 0;
    saturation = 0;
  } else {
    double delta = max - min;

    saturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min);

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

    hue /= 6;
  }

  target.h = hue;
  target.s = saturation;
  target.l = lightness;

  return target;
}