Пример #1
0
        public CIELAB(CIEXYZ xyz)
        {
            double delta = 6.0 / 29.0;

            double fx = xyz.X / Xn > Math.Pow(delta, 3) ? Math.Pow(xyz.X / Xn, 1.0 / 3.0) :
                (1.0 / 3.0) * Math.Pow((1 / delta), 2) * xyz.X / Xn + (4.0 / 29.0);

            double fy = xyz.Y / Yn > Math.Pow(delta, 3) ? Math.Pow(xyz.Y / Yn, 1.0 / 3.0) :
                (1.0 / 3.0) * Math.Pow((1 / delta), 2) * xyz.Y / Yn + (4.0 / 29.0);

            double fz = xyz.Z / Zn > Math.Pow(delta, 3) ? Math.Pow(xyz.Z / Zn, 1.0 / 3.0) :
                (1.0 / 3.0) * Math.Pow((1 / delta), 2) * xyz.Z / Zn + (4.0 / 29.0);

            L = 116.0 * fy - 16.0;
            a = 500.0 * (fx - fy);
            b = 200.0 * (fy - fz);
        }
Пример #2
0
        public static CIELAB Parse(CIEXYZ xyz)
        {
            CIELAB lab;

            lab.L = 116.0 * Fxyz(xyz.Y / Yn) - 16;
            lab.a = 500.0 * (Fxyz(xyz.X / Xn) - Fxyz(xyz.Y / Yn));
            lab.b = 200.0 * (Fxyz(xyz.Y / Yn) - Fxyz(xyz.Z / Zn));

            int ls = (int)(2.55 * lab.L + 4);
            int As = (int)(lab.a + 4);
            int Bs = (int)(lab.b + 4);

            lab.L = ls;
            lab.a = As;
            lab.b = Bs;

            return lab;
        }