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