interpolateRgbGamma function

Interpolator<ArgbColor> interpolateRgbGamma(
  1. ArgbColor a,
  2. ArgbColor b, {
  3. double gamma = 1.0,
})

Creates an RGB color interpolator with gamma correction.

Implementation

Interpolator<ArgbColor> interpolateRgbGamma(ArgbColor a, ArgbColor b,
    {double gamma = 1.0}) {
  final g = gamma;
  final invGamma = 1 / gamma;

  // Apply gamma correction to input colors
  final ar = math.pow(a.red / 255, g);
  final ag = math.pow(a.green / 255, g);
  final ab = math.pow(a.blue / 255, g);
  final aa = a.alpha / 255;

  final br = math.pow(b.red / 255, g) - ar;
  final bg = math.pow(b.green / 255, g) - ag;
  final bb = math.pow(b.blue / 255, g) - ab;
  final ba = b.alpha / 255 - aa;

  return (double t) {
    final r = math.pow(ar + br * t, invGamma);
    final gVal = math.pow(ag + bg * t, invGamma);
    final bVal = math.pow(ab + bb * t, invGamma);
    final aVal = aa + ba * t;

    return ArgbColor.fromARGB(
      (aVal * 255).round().clamp(0, 255),
      (r * 255).round().clamp(0, 255),
      (gVal * 255).round().clamp(0, 255),
      (bVal * 255).round().clamp(0, 255),
    );
  };
}