/// <summary> /// Convert from XYZ to CIE /// </summary> /// <param name="xyz">XYZ Color</param> /// <returns></returns> public static CIELabColor XYZToCIE_Lab(XYZColor xyz) { float var_X = xyz.x / 95.047f; // ref_X = 95.047 Observer= 2°, Illuminant= D65 float var_Y = xyz.y / 100.000f; // ref_Y = 100.000 float var_Z = xyz.z / 108.883f; // ref_Z = 108.883 if (var_X > 0.008856f) { var_X = (float)Math.Pow(var_X, (1 / 3f)); } else { var_X = (7.787f * var_X) + (16f / 116f); } if (var_Y > 0.008856f) { var_Y = (float)Math.Pow(var_Y, (1 / 3f)); } else { var_Y = (7.787f * var_Y) + (16f / 116f); } if (var_Z > 0.008856f) { var_Z = (float)Math.Pow(var_Z, (1 / 3f)); } else { var_Z = (7.787f * var_Z) + (16f / 116f); } float L = (116f * var_Y) - 16f; float a = 500f * (var_X - var_Y); float b = 200f * (var_Y - var_Z); return(new CIELabColor(L, a, b)); }
/// <summary> /// Convert from RGB to CIE /// </summary> /// <param name="col">Set Color</param> /// <returns></returns> public static CIELabColor FromRGB(Color col) { XYZColor xyz = XYZColor.FromRGB(col); return(ColorConverter.XYZToCIE_Lab(xyz)); }
/// <summary> /// Convert From XYZ to CIE /// </summary> /// <param name="xyz">XYZ</param> /// <returns></returns> public static CIELabColor FromXYZ(XYZColor xyz) { return(ColorConverter.XYZToCIE_Lab(xyz)); }