Beispiel #1
0
 public Color3(XyzColor color)
 {
     this.A     = color.X;
     this.B     = color.Y;
     this.C     = color.Z;
     this.Count = 1;
 }
        public static LabColor XyzToLab(XyzColor xyz)
        {
            double var_X = xyz.X / ref_X;          //ref_X =  95.047   Observer= 2°, Illuminant= D65
            double var_Y = xyz.Y / ref_Y;          //ref_Y = 100.000
            double var_Z = xyz.Z / ref_Z;          //ref_Z = 108.883

            if (var_X > 0.008856f)
            {
                var_X = Math.Pow(var_X, 1f / 3f);
            }
            else
            {
                var_X = (7.787f * var_X) + (16f / 116f);
            }
            if (var_Y > 0.008856f)
            {
                var_Y = Math.Pow(var_Y, 1f / 3f);
            }
            else
            {
                var_Y = (7.787f * var_Y) + (16f / 116f);
            }
            if (var_Z > 0.008856f)
            {
                var_Z = Math.Pow(var_Z, 1f / 3f);
            }
            else
            {
                var_Z = (7.787f * var_Z) + (16f / 116f);
            }

            return(new LabColor((116f * var_Y) - 16f,
                                500f * (var_X - var_Y),
                                200f * (var_Y - var_Z)));
        }
        public static Color XyzToRgb(XyzColor xyz)
        {
            double var_X = xyz.X / 100;        //X from 0 to  95.047      (Observer = 2°, Illuminant = D65)
            double var_Y = xyz.Y / 100f;       //Y from 0 to 100.000
            double var_Z = xyz.Z / 100f;       //Z from 0 to 108.883

            double var_R = var_X * 3.2406f + var_Y * -1.5372f + var_Z * -0.4986f;
            double var_G = var_X * -0.9689f + var_Y * 1.8758f + var_Z * 0.0415f;
            double var_B = var_X * 0.0557f + var_Y * -0.2040f + var_Z * 1.0570f;

            if (var_R > 0.0031308f)
            {
                var_R = 1.055f * (Math.Pow(var_R, 1f / 2.4f)) - 0.055f;
            }
            else
            {
                var_R = 12.92f * var_R;
            }
            if (var_G > 0.0031308f)
            {
                var_G = 1.055f * (Math.Pow(var_G, 1f / 2.4f)) - 0.055f;
            }
            else
            {
                var_G = 12.92f * var_G;
            }
            if (var_B > 0.0031308f)
            {
                var_B = 1.055f * (Math.Pow(var_B, 1f / 2.4f)) - 0.055f;
            }
            else
            {
                var_B = 12.92f * var_B;
            }

            return(Color.FromArgb(
                       LabColorTransform.Range((int)Math.Round(var_R * 255f, 0f), 0, 0xff),
                       LabColorTransform.Range((int)Math.Round(var_G * 255f, 0f), 0, 0xff),
                       LabColorTransform.Range((int)Math.Round(var_B * 255f, 0f), 0, 0xff)));
        }
 public static Color XyzToRgb(XyzColor xyz)
 {
     return(LabColorTransform.XyzToRgb(xyz));
 }