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);
        }