rgbToXyz static method
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);
}