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