You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.1 KiB
90 lines
2.1 KiB
/*****************************************************************************/
|
|
// Copyright 2006-2007 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.cpp#1 $ */
|
|
/* $DateTime: 2012/05/30 13:28:51 $ */
|
|
/* $Change: 832332 $ */
|
|
/* $Author: tknoll $ */
|
|
|
|
/*****************************************************************************/
|
|
|
|
#include "dng_xy_coord.h"
|
|
|
|
#include "dng_matrix.h"
|
|
#include "dng_utils.h"
|
|
|
|
/******************************************************************************/
|
|
|
|
dng_xy_coord XYZtoXY (const dng_vector_3 &coord)
|
|
{
|
|
|
|
real64 X = coord [0];
|
|
real64 Y = coord [1];
|
|
real64 Z = coord [2];
|
|
|
|
real64 total = X + Y + Z;
|
|
|
|
if (total > 0.0)
|
|
{
|
|
|
|
return dng_xy_coord (X / total,
|
|
Y / total);
|
|
|
|
}
|
|
|
|
return D50_xy_coord ();
|
|
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
dng_vector_3 XYtoXYZ (const dng_xy_coord &coord)
|
|
{
|
|
|
|
dng_xy_coord temp = coord;
|
|
|
|
// Restrict xy coord to someplace inside the range of real xy coordinates.
|
|
// This prevents math from doing strange things when users specify
|
|
// extreme temperature/tint coordinates.
|
|
|
|
temp.x = Pin_real64 (0.000001, temp.x, 0.999999);
|
|
temp.y = Pin_real64 (0.000001, temp.y, 0.999999);
|
|
|
|
if (temp.x + temp.y > 0.999999)
|
|
{
|
|
real64 scale = 0.999999 / (temp.x + temp.y);
|
|
temp.x *= scale;
|
|
temp.y *= scale;
|
|
}
|
|
|
|
return dng_vector_3 (temp.x / temp.y,
|
|
1.0,
|
|
(1.0 - temp.x - temp.y) / temp.y);
|
|
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
dng_xy_coord PCStoXY ()
|
|
{
|
|
|
|
return D50_xy_coord ();
|
|
|
|
}
|
|
|
|
/*****************************************************************************/
|
|
|
|
dng_vector_3 PCStoXYZ ()
|
|
{
|
|
|
|
return XYtoXYZ (PCStoXY ());
|
|
|
|
}
|
|
|
|
/*****************************************************************************/
|