예제 #1
0
        /// <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;
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
 /// <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));
 }
예제 #4
0
 /// <summary>
 /// MSH Constructor initialized from XYZ
 /// </summary>
 /// <param name="color">The XYZ color to convert</param>
 public MSHColor(XYZColor color)
 {
     FromLABColor(new LABColor(color));
 }
예제 #5
0
        /// <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);
        }
예제 #6
0
 /// <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);
 }
예제 #7
0
 /// <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));
 }
예제 #8
0
 /// <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);
 }
예제 #9
0
 /// <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);
 }