interpolateRgbGamma function
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),
);
};
}