maxChroma function

double maxChroma(
  1. double l,
  2. double hDeg
)

Largest in-gamut chroma at lightness l and hue hDeg: 24 bisection steps on 0, 0.4 (error < 3e-8). 0 at L ≤ 0 or L ≥ 1.

Implementation

double maxChroma(double l, double hDeg) {
  if (l <= 0 || l >= 1) return 0;
  final (s, co) = detSinCosDeg(hDeg);
  var lo = 0.0;
  var hi = chromaSearchMax;
  for (var i = 0; i < 24; i++) {
    final mid = (lo + hi) * 0.5;
    if (inGamut(oklabToLin((l, mid * co, mid * s)))) {
      lo = mid;
    } else {
      hi = mid;
    }
  }
  return lo;
}