oklabToRgb static method

RgbColor oklabToRgb(
  1. OklabColor oklabColor
)

Converts an Oklab color to an RGB color.

Implementation

static RgbColor oklabToRgb(OklabColor oklabColor) {
  if (oklabColor.isBlack) {
    return RgbColor(0, 0, 0, oklabColor.alpha);
  }
  if (oklabColor.isWhite) {
    return RgbColor(255, 255, 255, oklabColor.alpha);
  }

  final l = (oklabColor.lightness +
          (0.3963377774 * oklabColor.a) +
          (0.2158037573 * oklabColor.b))
      .cubed();
  final m = (oklabColor.lightness -
          (0.1055613458 * oklabColor.a) -
          (0.0638541728 * oklabColor.b))
      .cubed();
  final s = (oklabColor.lightness -
          (0.0894841775 * oklabColor.a) -
          (1.2914855480 * oklabColor.b))
      .cubed();

  return _LinearRgbColor(
    (4.0767416621 * l) - (3.3077115913 * m) + (0.2309699292 * s),
    (-1.2684380046 * l) + (2.6097574011 * m) - (0.3413193965 * s),
    (-0.0041960863 * l) - (0.7034186147 * m) + (1.7076147010 * s),
  ).normalize().copyWith(alpha: oklabColor.alpha);
}