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 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 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 142 inline dng_xy_coord StdA_xy_coord () 143 { 144 return dng_xy_coord (0.4476, 0.4074); 145 } 146 147 inline dng_xy_coord D50_xy_coord () 148 { 149 return dng_xy_coord (0.3457, 0.3585); 150 } 151 152 inline dng_xy_coord D55_xy_coord () 153 { 154 return dng_xy_coord (0.3324, 0.3474); 155 } 156 157 inline dng_xy_coord D65_xy_coord () 158 { 159 return dng_xy_coord (0.3127, 0.3290); 160 } 161 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