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
30class dng_xy_coord
31	{
32
33	public:
34
35		real64 x;
36		real64 y;
37
38	public:
39
40		dng_xy_coord ()
41			:	x (0.0)
42			,	y (0.0)
43			{
44			}
45
46		dng_xy_coord (real64 xx, real64 yy)
47			:	x (xx)
48			,	y (yy)
49			{
50			}
51
52		void Clear ()
53			{
54			x = 0.0;
55			y = 0.0;
56			}
57
58		bool IsValid () const
59			{
60			return x > 0.0 &&
61				   y > 0.0;
62			}
63
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
84inline 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
99inline 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
114inline 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
129inline 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
142inline dng_xy_coord StdA_xy_coord ()
143	{
144	return dng_xy_coord (0.4476, 0.4074);
145	}
146
147inline dng_xy_coord D50_xy_coord ()
148	{
149	return dng_xy_coord (0.3457, 0.3585);
150	}
151
152inline dng_xy_coord D55_xy_coord ()
153	{
154	return dng_xy_coord (0.3324, 0.3474);
155	}
156
157inline dng_xy_coord D65_xy_coord ()
158	{
159	return dng_xy_coord (0.3127, 0.3290);
160	}
161
162inline 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
171dng_xy_coord XYZtoXY (const dng_vector_3 &coord);
172
173dng_vector_3 XYtoXYZ (const dng_xy_coord &coord);
174
175/*****************************************************************************/
176
177// Returns the ICC XYZ profile connection space white point.
178
179dng_xy_coord PCStoXY ();
180
181dng_vector_3 PCStoXYZ ();
182
183/*****************************************************************************/
184
185#endif
186
187/*****************************************************************************/
188