rgbToXyz static method

XyzColor rgbToXyz(
  1. RgbColor rgbColor
)

Converts an RGB color to a XYZ color.

Implementation

static XyzColor rgbToXyz(RgbColor rgbColor) {
  if (rgbColor.isBlack) return XyzColor(0, 0, 0, rgbColor.alpha);
  if (rgbColor.isWhite) return XyzColor(100, 100, 100, rgbColor.alpha);

  final rgb = rgbColor
      .toFactoredList()
      .map((rgbValue) => ((rgbValue <= 0.04045)
              ? rgbValue / 12.92
              : math.pow((rgbValue + 0.055) / 1.055, 2.4))
          .toDouble())
      .toList();

  final red = rgb[0];
  final green = rgb[1];
  final blue = rgb[2];

  final x = _WhitePoints.rgb.x *
      ((red * 0.41239079926595) +
          (green * 0.35758433938387) +
          (blue * 0.18048078840183));
  final y = _WhitePoints.rgb.y *
      ((red * 0.21263900587151) +
          (green * 0.71516867876775) +
          (blue * 0.072192315360733));
  final z = _WhitePoints.rgb.z *
      ((red * 0.019330818715591) +
          (green * 0.11919477979462) +
          (blue * 0.95053215224966));

  return XyzColor(x, y, z, rgbColor.alpha);
}