Gamut.fromPrimaries constructor

Gamut.fromPrimaries({
  1. required String name,
  2. required List<List<double>> rgbToXyz,
  3. required double trueDelinearize(
    1. double
    ),
  4. required double linearize(
    1. double
    ),
})

Creates a Gamut from an RGB-to-XYZ matrix and transfer functions.

The composite matrices are computed automatically. The critical planes table is generated from the linearize function.

Implementation

factory Gamut.fromPrimaries({
  required String name,
  required List<List<double>> rgbToXyz,
  required double Function(double) trueDelinearize,
  required double Function(double) linearize,
}) {
  final scaledDiscount = computeScaledDiscountFromLinrgb(rgbToXyz);
  final linrgbFromSD = computeLinrgbFromScaledDiscount(rgbToXyz);
  final xyzToRgb = invert3x3(rgbToXyz);
  final yRow = [rgbToXyz[1][0], rgbToXyz[1][1], rgbToXyz[1][2]];

  // Generate critical planes from the linearize function
  final planes = List<double>.generate(255, (i) => linearize(i + 0.5));

  return Gamut(
    name: name,
    yFromLinrgb: yRow,
    scaledDiscountFromLinrgb: scaledDiscount,
    linrgbFromScaledDiscount: linrgbFromSD,
    rgbToXyz: rgbToXyz,
    xyzToRgb: xyzToRgb,
    trueDelinearize: trueDelinearize,
    linearize: linearize,
    criticalPlanes: planes,
  );
}