srgbToLab function

Lab srgbToLab(
  1. int r,
  2. int g,
  3. int b
)

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));
}