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