rgbToOklab static method

OklabColor rgbToOklab(
  1. RgbColor rgbColor
)

Converts an sRGB color to an Oklab color.

Implementation

static OklabColor rgbToOklab(RgbColor rgbColor) {
  if (rgbColor.isBlack) return OklabColor(0.0, 0.0, 0.0, rgbColor.alpha);
  if (rgbColor.isWhite) return OklabColor(1.0, 0.0, 0.0, rgbColor.alpha);

  final lrgb = rgbColor.linearize();

  final l = ((0.4122214708 * lrgb.red) +
          (0.5363325363 * lrgb.green) +
          (0.0514459929 * lrgb.blue))
      .cbrt();
  final m = ((0.2119034982 * lrgb.red) +
          (0.6806995451 * lrgb.green) +
          (0.1073969566 * lrgb.blue))
      .cbrt();
  final s = ((0.0883024619 * lrgb.red) +
          (0.2817188376 * lrgb.green) +
          (0.6299787005 * lrgb.blue))
      .cbrt();

  return OklabColor(
    (0.2104542553 * l) + (0.7936177850 * m) - (0.0040720468 * s),
    (1.9779984951 * l) - (2.4285922050 * m) + (0.4505937099 * s),
    (0.0259040371 * l) + (0.7827717662 * m) - (0.8086757660 * s),
    rgbColor.alpha,
  );
}