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