public static DoubleColor Double( this CIEAXYZ xyz ) { double x = xyz.X; double y = xyz.Y; double z = xyz.Z; double[] Clinear = new double[3]; Clinear[0] = x * 3.2406 - y * 1.5372 - z * 0.4986; // red Clinear[1] = -x * 0.9689 + y * 1.8758 + z * 0.0415; // green Clinear[2] = x * 0.0557 - y * 0.2040 + z * 1.0570; // blue for (int i = 0; i < 3; i++) { Clinear[i] = (Clinear[i] <= 0.0031308) ? 12.92 * Clinear[i] : 1.055 * Math.Pow(Clinear[i], (1.0 / 2.4)) - 0.055; } return(new DoubleColor() { A = xyz.Alpha * 255.0, R = Clinear[0] * 255.0, G = Clinear[1] * 255.0, B = Clinear[2] * 255.0 }); }
public static CIELab ToCIELab( this CIEAXYZ axyz ) { CIELab lab = CIELab.Empty; double x = axyz.X; double y = axyz.Y; double z = axyz.Z; lab.Luminance = 116.0 * Fxyz(y / CIEAXYZ.D65.Y) - 16; lab.RedGreenDimension = 500.0 * (Fxyz(x / CIEAXYZ.D65.X) - Fxyz(y / CIEAXYZ.D65.Y)); lab.YellowBlueDimension = 200.0 * (Fxyz(y / CIEAXYZ.D65.Y) - Fxyz(z / CIEAXYZ.D65.Z)); lab.Alpha = axyz.Alpha; return(lab); }