srgbToLab function
Convert sRGB (0..255 per channel) to CIE Lab under D65.
Implementation
Lab srgbToLab(int r, int g, int b) {
final rl = _srgbToLinear(r / 255.0);
final gl = _srgbToLinear(g / 255.0);
final bl = _srgbToLinear(b / 255.0);
// Linear RGB → XYZ (sRGB matrix, D65).
final x = rl * 0.4124564 + gl * 0.3575761 + bl * 0.1804375;
final y = rl * 0.2126729 + gl * 0.7151522 + bl * 0.0721750;
final z = rl * 0.0193339 + gl * 0.1191920 + bl * 0.9503041;
// D65 reference white.
const xn = 0.95047;
const yn = 1.00000;
const zn = 1.08883;
final fx = _labF(x / xn);
final fy = _labF(y / yn);
final fz = _labF(z / zn);
return Lab(116.0 * fy - 16.0, 500.0 * (fx - fy), 200.0 * (fy - fz));
}