/// <summary> /// Set the L, A and B values from XYZ colorspace value /// </summary> /// <param name="xyz">color the color to transform</param> public void SetFromXYZ(XYZColor xyz) { float fX = F(xyz.X / XYZColor.Reference.X); float fY = F(xyz.Y / XYZColor.Reference.Y); float fZ = F(xyz.Z / XYZColor.Reference.Z); L = 116 * fY - 16.0f; A = 500 * (fX - fY); B = 200 * (fY - fZ); Transparency = xyz.A; }
/// <summary> /// Set the L, U and V values from XYZ colorspace value /// </summary> /// <param name="xyz">the color to transform</param> public void SetFromXYZ(XYZColor xyz) { float un = 4 * XYZColor.Reference.X / (XYZColor.Reference.X + 15 * XYZColor.Reference.Y + 3 * XYZColor.Reference.Z); float vn = 9 * XYZColor.Reference.Y / (XYZColor.Reference.X + 15 * XYZColor.Reference.Y + 3 * XYZColor.Reference.Z); float y = xyz.Y / XYZColor.Reference.Y; if (y < 0.008856f) //(6/29)**3 = 0.008856 { L = 903.296296f * y; //(29/3)**3 = 903.296296 } else { L = 116.0f * (float)(Math.Pow(y, 1.0f / 3.0f)) - 16.0f; } U = 13.0f * L * (4.0f * xyz.X / (xyz.X + 15.0f * xyz.Y + 3.0f * xyz.Z) - un); V = 13.0f * L * (9.0f * xyz.Y / (xyz.X + 15.0f * xyz.Y + 3.0f * xyz.Z) - vn); A = xyz.A; }
/// <summary> /// Convert a XYZ colorspace value into a MSH colorspace value /// </summary> /// <param name="color">The XYZ value</param> public void FromXYZ(XYZColor color) { FromLABColor(new LABColor(color)); }
/// <summary> /// MSH Constructor initialized from XYZ /// </summary> /// <param name="color">The XYZ color to convert</param> public MSHColor(XYZColor color) { FromLABColor(new LABColor(color)); }
/// <summary> /// Set the L, U and V values from RGB colorspace value /// </summary> /// <param name="color">the color to transform</param> public void SetFromRGB(Color color) { XYZColor xyz = new XYZColor(color); SetFromXYZ(xyz); }
/// <summary> /// Constructor, determines L, U and V values from XYZ colorspace /// </summary> /// <param name="xyz">The XYZ color value</param> public LUVColor(XYZColor xyz) { SetFromXYZ(xyz); }
/// <summary> /// MSH Constructor initialized from XYZ /// </summary> /// <param name="color">The XYZ color to convert</param> public MSHColor(XYZColor color) { M = S = H = A = 0; FromLABColor(new LABColor(color)); }
/// <summary> /// Constructor, determines L, U and V values from XYZ colorspace /// </summary> /// <param name="xyz">The XYZ color value</param> public LUVColor(XYZColor xyz) { L = U = V = A = 0; SetFromXYZ(xyz); }
/// <summary> /// Constructor, determines L, A and B values from XYZ colorspace /// </summary> /// <param name="xyz">The XYZ color to transform</param> public LABColor(XYZColor xyz) { L = A = B = Transparency = 0; SetFromXYZ(xyz); }