5 namespace ColorSpaces
\r
12 * White Point: Illuminant E
\r
14 public struct CIERGB
\r
16 public double R, G, B;
\r
18 public CIEXYZ convertToCIEXYZ()
\r
22 { 0.49, 0.31, 0.20 },
\r
23 { 0.17697, 0.81240, 0.01063 },
\r
24 { 0.00, 0.01, 0.99 }
\r
29 v.X = b[0, 0] * R + b[0, 1] * G + b[0, 2] * B;
\r
30 v.Y = b[1, 0] * R + b[1, 1] * G + b[1, 2] * B;
\r
31 v.Z = b[2, 0] * R + b[2, 1] * G + b[2, 2] * B;
\r
40 public struct CIEXYZ
\r
42 public double X, Y, Z;
\r
44 public CIExyY convertToCIExyY()
\r
48 double denominator = X + Y + Z;
\r
49 v.x = X / denominator;
\r
50 v.y = Y / denominator;
\r
57 public struct CIExyY
\r
59 public double x, y, Y;
\r
61 public CIEXYZ convertToCIEXYZ()
\r
67 v.Z = Y / y * (1 - x - y);
\r
72 // Yn = 1.0 when RGB of white point is { 1, 1, 1 }
\r
73 public CIELuv convertToCIELuv(double Yn = 1.0)
\r
78 double denominator = (-2 * x + 12 * y + 3);
\r
79 double up = 4 * x / denominator;
\r
80 double vp = 9 * y / denominator;
\r
83 v.L = Yd > System.Math.Pow(6 / 29, 3) ? 116 * System.Math.Pow(Yd, 3) : System.Math.Pow(29 / 3, 3) * Yd;
\r
84 v.u = 13 * v.L * (up - 0.2009);
\r
85 v.v = 13 * v.L * (vp - 0.4610);
\r
93 * standard illuminant C
\r
95 public struct CIELuv
\r
97 public double L, u, v;
\r
101 public struct CIELab
\r
103 public double L, a, b;
\r