1 /*****************************************************************************/
2 // Copyright 2006 Adobe Systems Incorporated
3 // All Rights Reserved.
4 //
5 // NOTICE:  Adobe permits you to use, modify, and distribute this file in
6 // accordance with the terms of the Adobe license agreement accompanying it.
7 /*****************************************************************************/
8 
9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_xy_coord.h#2 $ */
10 /* $DateTime: 2012/07/31 22:04:34 $ */
11 /* $Change: 840853 $ */
12 /* $Author: tknoll $ */
13 
14 /** \file
15  * Representation of colors in xy and XYZ coordinates.
16  */
17 
18 /*****************************************************************************/
19 
20 #ifndef __dng_xy_coord__
21 #define __dng_xy_coord__
22 
23 /*****************************************************************************/
24 
25 #include "dng_classes.h"
26 #include "dng_types.h"
27 
28 /*****************************************************************************/
29 
30 class dng_xy_coord
31 	{
32 
33 	public:
34 
35 		real64 x;
36 		real64 y;
37 
38 	public:
39 
dng_xy_coord()40 		dng_xy_coord ()
41 			:	x (0.0)
42 			,	y (0.0)
43 			{
44 			}
45 
dng_xy_coord(real64 xx,real64 yy)46 		dng_xy_coord (real64 xx, real64 yy)
47 			:	x (xx)
48 			,	y (yy)
49 			{
50 			}
51 
Clear()52 		void Clear ()
53 			{
54 			x = 0.0;
55 			y = 0.0;
56 			}
57 
IsValid()58 		bool IsValid () const
59 			{
60 			return x > 0.0 &&
61 				   y > 0.0;
62 			}
63 
NotValid()64 		bool NotValid () const
65 			{
66 			return !IsValid ();
67 			}
68 
69 		bool operator== (const dng_xy_coord &coord) const
70 			{
71 			return coord.x == x &&
72 				   coord.y == y;
73 			}
74 
75 		bool operator!= (const dng_xy_coord &coord) const
76 			{
77 			return !(*this == coord);
78 			}
79 
80 	};
81 
82 /*****************************************************************************/
83 
84 inline dng_xy_coord operator+ (const dng_xy_coord &A,
85 							   const dng_xy_coord &B)
86 	{
87 
88 	dng_xy_coord C;
89 
90 	C.x = A.x + B.x;
91 	C.y = A.y + B.y;
92 
93 	return C;
94 
95 	}
96 
97 /*****************************************************************************/
98 
99 inline dng_xy_coord operator- (const dng_xy_coord &A,
100 							   const dng_xy_coord &B)
101 	{
102 
103 	dng_xy_coord C;
104 
105 	C.x = A.x - B.x;
106 	C.y = A.y - B.y;
107 
108 	return C;
109 
110 	}
111 
112 /*****************************************************************************/
113 
114 inline dng_xy_coord operator* (real64 scale,
115 							   const dng_xy_coord &A)
116 	{
117 
118 	dng_xy_coord B;
119 
120 	B.x = A.x * scale;
121 	B.y = A.y * scale;
122 
123 	return B;
124 
125 	}
126 
127 /******************************************************************************/
128 
129 inline real64 operator* (const dng_xy_coord &A,
130 						 const dng_xy_coord &B)
131 	{
132 
133 	return A.x * B.x +
134 		   A.y * B.y;
135 
136 	}
137 
138 /*****************************************************************************/
139 
140 // Standard xy coordinate constants.
141 
StdA_xy_coord()142 inline dng_xy_coord StdA_xy_coord ()
143 	{
144 	return dng_xy_coord (0.4476, 0.4074);
145 	}
146 
D50_xy_coord()147 inline dng_xy_coord D50_xy_coord ()
148 	{
149 	return dng_xy_coord (0.3457, 0.3585);
150 	}
151 
D55_xy_coord()152 inline dng_xy_coord D55_xy_coord ()
153 	{
154 	return dng_xy_coord (0.3324, 0.3474);
155 	}
156 
D65_xy_coord()157 inline dng_xy_coord D65_xy_coord ()
158 	{
159 	return dng_xy_coord (0.3127, 0.3290);
160 	}
161 
D75_xy_coord()162 inline dng_xy_coord D75_xy_coord ()
163 	{
164 	return dng_xy_coord (0.2990, 0.3149);
165 	}
166 
167 /*****************************************************************************/
168 
169 // Convert between xy coordinates and XYZ coordinates.
170 
171 dng_xy_coord XYZtoXY (const dng_vector_3 &coord);
172 
173 dng_vector_3 XYtoXYZ (const dng_xy_coord &coord);
174 
175 /*****************************************************************************/
176 
177 // Returns the ICC XYZ profile connection space white point.
178 
179 dng_xy_coord PCStoXY ();
180 
181 dng_vector_3 PCStoXYZ ();
182 
183 /*****************************************************************************/
184 
185 #endif
186 
187 /*****************************************************************************/
188