HSLColor.fromColor constructor

HSLColor.fromColor(
  1. Color color
)

Creates an HSLColor from an RGB Color.

This constructor does not necessarily round-trip with toColor because of floating point imprecision.

Implementation

factory HSLColor.fromColor(Color color) {
  var red = color.red / 0xFF;
  var green = color.green / 0xFF;
  var blue = color.blue / 0xFF;

  var max = math.max(red, math.max(green, blue));
  var min = math.min(red, math.min(green, blue));
  var delta = max - min;

  var alpha = color.alpha / 0xFF;
  var hue = _getHue(red, green, blue, max, delta);
  var lightness = (max + min) / 2.0;
  // Saturation can exceed 1.0 with rounding errors, so clamp it.
  var saturation = lightness == 1.0
      ? 0.0
      : (delta / (1.0 - (2.0 * lightness - 1.0).abs())).clamp(0.0, 1.0);
  return HSLColor.fromAHSL(alpha, hue, saturation, lightness);
}