rgbToHsl function

HSLColor rgbToHsl({
  1. required double r,
  2. required double g,
  3. required double b,
})

Implementation

HSLColor rgbToHsl({
  required double r,
  required double g,
  required double b,
}) {
  final double rBound = bound01(r, 255.0);
  final double gBound = bound01(g, 255.0);
  final double bBound = bound01(b, 255.0);

  final max = [rBound, gBound, bBound].reduce(math.max);
  final min = [rBound, gBound, bBound].reduce(math.min);
  double h = 0.0;
  double s = 0.0;
  final double l = (max + min) / 2;

  if (max == min) {
    h = s = 0.0;
  } else {
    final double d = max - min;
    s = l > 0.5 ? d / (2.0 - max - min) : d / (max + min);
    if (max == rBound) {
      h = (gBound - bBound) / d + (gBound < bBound ? 6 : 0);
    } else if (max == gBound) {
      h = (bBound - rBound) / d + 2;
    } else if (max == bBound) {
      h = (rBound - gBound) / d + 4;
    }
  }

  h /= 6.0;
  return HSLColor.fromAHSL(1.0, h, s, l);
}