C++程序  |  188行  |  3.55 KB

/*****************************************************************************/
// Copyright 2006 Adobe Systems Incorporated
// All Rights Reserved.
//
// NOTICE:  Adobe permits you to use, modify, and distribute this file in
// accordance with the terms of the Adobe license agreement accompanying it.
/*****************************************************************************/

/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_xy_coord.h#2 $ */ 
/* $DateTime: 2012/07/31 22:04:34 $ */
/* $Change: 840853 $ */
/* $Author: tknoll $ */

/** \file
 * Representation of colors in xy and XYZ coordinates.
 */

/*****************************************************************************/

#ifndef __dng_xy_coord__
#define __dng_xy_coord__

/*****************************************************************************/

#include "dng_classes.h"
#include "dng_types.h"

/*****************************************************************************/

class dng_xy_coord
	{
	
	public:
	
		real64 x;
		real64 y;
		
	public:
	
		dng_xy_coord ()
			:	x (0.0)
			,	y (0.0)
			{
			}
			
		dng_xy_coord (real64 xx, real64 yy)
			:	x (xx)
			,	y (yy)
			{
			}
			
		void Clear ()
			{
			x = 0.0;
			y = 0.0;
			}
			
		bool IsValid () const
			{
			return x > 0.0 &&
				   y > 0.0;
			}

		bool NotValid () const
			{
			return !IsValid ();
			}

		bool operator== (const dng_xy_coord &coord) const
			{
			return coord.x == x &&
				   coord.y == y;
			}

		bool operator!= (const dng_xy_coord &coord) const
			{
			return !(*this == coord);
			}

	};

/*****************************************************************************/

inline dng_xy_coord operator+ (const dng_xy_coord &A,
							   const dng_xy_coord &B)
	{
	
	dng_xy_coord C;
	
	C.x = A.x + B.x;
	C.y = A.y + B.y;
	
	return C;
	
	}
			
/*****************************************************************************/

inline dng_xy_coord operator- (const dng_xy_coord &A,
							   const dng_xy_coord &B)
	{
	
	dng_xy_coord C;
	
	C.x = A.x - B.x;
	C.y = A.y - B.y;
	
	return C;
	
	}
			
/*****************************************************************************/

inline dng_xy_coord operator* (real64 scale,
							   const dng_xy_coord &A)
	{
	
	dng_xy_coord B;
	
	B.x = A.x * scale;
	B.y = A.y * scale;
	
	return B;
	
	}
			
/******************************************************************************/

inline real64 operator* (const dng_xy_coord &A,
						 const dng_xy_coord &B)
	{
	
	return A.x * B.x +
		   A.y * B.y;
	
	}

/*****************************************************************************/

// Standard xy coordinate constants.

inline dng_xy_coord StdA_xy_coord ()
	{
	return dng_xy_coord (0.4476, 0.4074);
	}

inline dng_xy_coord D50_xy_coord ()
	{
	return dng_xy_coord (0.3457, 0.3585);
	}

inline dng_xy_coord D55_xy_coord ()
	{
	return dng_xy_coord (0.3324, 0.3474);
	}

inline dng_xy_coord D65_xy_coord ()
	{
	return dng_xy_coord (0.3127, 0.3290);
	}

inline dng_xy_coord D75_xy_coord ()
	{
	return dng_xy_coord (0.2990, 0.3149);
	}

/*****************************************************************************/

// Convert between xy coordinates and XYZ coordinates.

dng_xy_coord XYZtoXY (const dng_vector_3 &coord);

dng_vector_3 XYtoXYZ (const dng_xy_coord &coord);

/*****************************************************************************/

// Returns the ICC XYZ profile connection space white point.

dng_xy_coord PCStoXY ();

dng_vector_3 PCStoXYZ ();

/*****************************************************************************/

#endif
	
/*****************************************************************************/