예제 #1
0
        public static C3f FromXYZToYxy(this C3f XYZ)
        {
            double Y = XYZ.G;
            double x = XYZ.R / (XYZ.R + XYZ.G + XYZ.B);
            double y = XYZ.G / (XYZ.R + XYZ.G + XYZ.B);

            return(new C3f(Y, x, y));
        }
예제 #2
0
        public static C3f FromYuvToYxy(this C3f Yuv)
        {
            var Y = Yuv.R;
            var u = Yuv.G;
            var v = Yuv.B;

            return(new C3f(Y,
                           3 * u / (2 * u - 8 * v + 4),
                           2 * v / (2 * u - 8 * v + 4)));
        }
예제 #3
0
        public static C4f GetLodColor(int level, int maxLevel)
        {
            if (maxLevel == 0)
            {
                return(C4f.Red);
            }

            float hue = ((float)level / (float)maxLevel) * 2 / (float)3;

            return(C3f.FromHSV(hue, 1.0f, 1.0f).ToC4f());
        }
예제 #4
0
        /// <summary>
        /// converts Lab-color to XYZ-color
        /// </summary>
        /// <param name="lab">L=[0,100], a=[-150,150], b=[-150,150]</param>
        /// <returns></returns>
        public static C3f LabToXYZ(this C3f lab)
        {
            var L = lab.R;
            var a = lab.G;
            var b = lab.B;

            var d = (1.0f / 116.0f) * (L + 16);
            var Y = YREF * fInv(d);
            var X = XREF * fInv(d + a / 500.0f);
            var Z = ZREF * fInv(d - b / 200.0f);

            return(new C3f(X, Y, Z));
        }
예제 #5
0
        public static C3f FromYxyToXYZ(this C3f Yxy)
        {
            double Y = Yxy.R;
            double x = Yxy.G;
            double y = Yxy.B;

            //AZ: check for y == 0  needed - szabo: DONE
            if (y == 0)
            {
                y = double.Epsilon;
            }

            return(new C3f((x * (Y / y)), Y, ((1 - x - y) * (Y / y))));
        }
예제 #6
0
        /// <summary>
        /// Converts XYZ-color to Lab-color
        /// </summary>
        /// <param name="xyz"></param>
        /// <returns></returns>
        public static C3f XYZToLab(this C3f xyz)
        {
            var X = xyz.R / XREF;
            var Y = xyz.G / YREF;
            var Z = xyz.B / ZREF;

            var fx = f(X);
            var fy = f(Y);
            var fz = f(Z);

            var L = (116 * fy) - 16;
            var a = 500 * (fx - fy);
            var b = 200 * (fy - fz);

            return(new C3f(L, a, b));
        }
예제 #7
0
 /// <summary>
 /// Returns the int representation of the supplied C3f color.
 /// </summary>
 public static int FromRgbToInt(this C3f self)
 {
     return(Col.ByteFromDouble(self.R) << 16 |
            Col.ByteFromDouble(self.G) << 8 |
            Col.ByteFromDouble(self.B));
 }
예제 #8
0
 /// <summary>
 /// Returns the GamutMap represantion of the supplied C3f.
 /// </summary>
 public static C3f ToGamutMap(this C3f self)
 {
     return(self.Clamped(0.0f, 1.0f));
 }
예제 #9
0
 public void Write(C3f c)
 {
     Write(c.R); Write(c.G); Write(c.B);
 }
예제 #10
0
 public void Write(C3f value)
 {
     base.Write(Conversion.HostToNetworkOrder(value.R));
     base.Write(Conversion.HostToNetworkOrder(value.G));
     base.Write(Conversion.HostToNetworkOrder(value.B));
 }
예제 #11
0
 /// <summary>Computes MD5 hash of given data.</summary>
 public static Guid ComputeMd5Hash(this C3f x)
 => ComputeMd5Hash(bw => { bw.Write(x.R); bw.Write(x.G); bw.Write(x.B); });
 /// <summary>
 /// C3f to System.Drawing.Color.
 /// </summary>
 public static Color ToColor(this C3f color) => Color.FromArgb(
     Col.ByteFromFloatClamped(color.R),
     Col.ByteFromFloatClamped(color.G),
     Col.ByteFromFloatClamped(color.B));