+++ /dev/null
-using System;\r
-\r
-namespace Psychlops\r
-{\r
- namespace ColorSpaces\r
- {\r
- /*\r
- * CIE 1931\r
- * R: 700 nm\r
- * G: 546.1 nm\r
- * B: 435.8 nm\r
- * White Point: Illuminant E\r
- */\r
- public struct CIERGB\r
- {\r
- public double R, G, B;\r
-\r
- public CIEXYZ convertToCIEXYZ()\r
- {\r
- double[,] b =\r
- { \r
- { 0.49, 0.31, 0.20 },\r
- { 0.17697, 0.81240, 0.01063 },\r
- { 0.00, 0.01, 0.99 }\r
- };\r
-\r
- CIEXYZ v;\r
-\r
- v.X = b[0, 0] * R + b[0, 1] * G + b[0, 2] * B;\r
- v.Y = b[1, 0] * R + b[1, 1] * G + b[1, 2] * B;\r
- v.Z = b[2, 0] * R + b[2, 1] * G + b[2, 2] * B;\r
-\r
- return v;\r
- }\r
- }\r
-\r
- /*\r
- * CIE 1931\r
- */\r
- public struct CIEXYZ\r
- {\r
- public double X, Y, Z;\r
-\r
- public CIExyY convertToCIExyY()\r
- {\r
- CIExyY v;\r
-\r
- double denominator = X + Y + Z;\r
- v.x = X / denominator;\r
- v.y = Y / denominator;\r
- v.Y = Y;\r
-\r
- return v;\r
- }\r
- }\r
-\r
- public struct CIExyY\r
- {\r
- public double x, y, Y;\r
-\r
- public CIEXYZ convertToCIEXYZ()\r
- {\r
- CIEXYZ v;\r
-\r
- v.X = Y / y * x;\r
- v.Y = Y;\r
- v.Z = Y / y * (1 - x - y);\r
-\r
- return v;\r
- }\r
-\r
- // Yn = 1.0 when RGB of white point is { 1, 1, 1 }\r
- public CIELuv convertToCIELuv(double Yn = 1.0)\r
- {\r
-\r
- CIELuv v;\r
-\r
- double denominator = (-2 * x + 12 * y + 3);\r
- double up = 4 * x / denominator;\r
- double vp = 9 * y / denominator;\r
-\r
- double Yd = Y / Yn;\r
- v.L = Yd > System.Math.Pow(6 / 29, 3) ? 116 * System.Math.Pow(Yd, 3) : System.Math.Pow(29 / 3, 3) * Yd;\r
- v.u = 13 * v.L * (up - 0.2009);\r
- v.v = 13 * v.L * (vp - 0.4610);\r
-\r
- return v;\r
- }\r
- }\r
-\r
- /* L*u*v*\r
- * CIE 1976\r
- * standard illuminant C\r
- */\r
- public struct CIELuv\r
- {\r
- public double L, u, v;\r
-\r
- }\r
-\r
- public struct CIELab\r
- {\r
- public double L, a, b;\r
-\r
- }\r
-\r
- }\r
-}
\ No newline at end of file