xyzToRgb static method

RgbColor xyzToRgb(
  1. XyzColor xyzColor
)

Converts an XYZ color to a RGB color.

Implementation

static RgbColor xyzToRgb(XyzColor xyzColor) {
  final x = xyzColor.x / _WhitePoints.rgb.x;
  final y = xyzColor.y / _WhitePoints.rgb.y;
  final z = xyzColor.z / _WhitePoints.rgb.z;

  double red, green, blue;

  double factorValue(double value) {
    value = (value <= 0.0031308)
        ? value * 12.92
        : ((1.055 * math.pow(value, 1.0 / 2.4)) - 0.055);

    return [
      [0, value].reduce(math.max),
      1
    ].reduce(math.min).toDouble();
  }

  red = factorValue((x * 3.240969941904521) +
      (y * -1.537383177570093) +
      (z * -0.498610760293));
  green = factorValue((x * -0.96924363628087) +
      (y * 1.87596750150772) +
      (z * 0.041555057407175));
  blue = factorValue((x * 0.055630079696993) +
      (y * -0.20397695888897) +
      (z * 1.056971514242878));

  final alpha = xyzColor.alpha / 255;

  return RgbColor.extrapolate(<double>[red, green, blue, alpha]);
}