kopia lustrzana https://github.com/gopro/gpr
147 wiersze
4.3 KiB
C++
147 wiersze
4.3 KiB
C++
/*****************************************************************************/
|
|
// Copyright 2006-2008 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_color_spec.h#1 $ */
|
|
/* $DateTime: 2012/05/30 13:28:51 $ */
|
|
/* $Change: 832332 $ */
|
|
/* $Author: tknoll $ */
|
|
|
|
/** \file
|
|
* Class for holding a specific color transform.
|
|
*/
|
|
|
|
#ifndef __dng_color_spec__
|
|
#define __dng_color_spec__
|
|
|
|
/*****************************************************************************/
|
|
|
|
#include "dng_classes.h"
|
|
#include "dng_matrix.h"
|
|
#include "dng_types.h"
|
|
#include "dng_xy_coord.h"
|
|
|
|
/*****************************************************************************/
|
|
|
|
/// \brief Compute a 3x3 matrix which maps colors from white point white1 to
|
|
/// white point white2
|
|
///
|
|
/// Uses linearized Bradford adaptation matrix to compute a mapping from
|
|
/// colors measured with one white point (white1) to another (white2).
|
|
|
|
dng_matrix_3by3 MapWhiteMatrix (const dng_xy_coord &white1,
|
|
const dng_xy_coord &white2);
|
|
|
|
/*****************************************************************************/
|
|
|
|
/// Color transform taking into account white point and camera calibration and
|
|
/// individual calibration from DNG negative.
|
|
|
|
class dng_color_spec
|
|
{
|
|
|
|
private:
|
|
|
|
uint32 fChannels;
|
|
|
|
real64 fTemperature1;
|
|
real64 fTemperature2;
|
|
|
|
dng_matrix fColorMatrix1;
|
|
dng_matrix fColorMatrix2;
|
|
|
|
dng_matrix fForwardMatrix1;
|
|
dng_matrix fForwardMatrix2;
|
|
|
|
dng_matrix fReductionMatrix1;
|
|
dng_matrix fReductionMatrix2;
|
|
|
|
dng_matrix fCameraCalibration1;
|
|
dng_matrix fCameraCalibration2;
|
|
|
|
dng_matrix fAnalogBalance;
|
|
|
|
dng_xy_coord fWhiteXY;
|
|
|
|
dng_vector fCameraWhite;
|
|
dng_matrix fCameraToPCS;
|
|
|
|
dng_matrix fPCStoCamera;
|
|
|
|
public:
|
|
|
|
/// Read calibration info from DNG negative and construct a
|
|
/// dng_color_spec.
|
|
|
|
dng_color_spec (const dng_negative &negative,
|
|
const dng_camera_profile *profile);
|
|
|
|
virtual ~dng_color_spec ()
|
|
{
|
|
}
|
|
|
|
/// Number of channels used for this color transform. Three
|
|
/// for most cameras.
|
|
|
|
uint32 Channels () const
|
|
{
|
|
return fChannels;
|
|
}
|
|
|
|
/// Setter for white point. Value is as XY colorspace coordinate.
|
|
/// \param white White point to set as an XY value.
|
|
|
|
void SetWhiteXY (const dng_xy_coord &white);
|
|
|
|
/// Getter for white point. Value is as XY colorspace coordinate.
|
|
/// \retval XY value of white point.
|
|
|
|
const dng_xy_coord & WhiteXY () const;
|
|
|
|
/// Return white point in camera native color coordinates.
|
|
/// \retval A dng_vector with components ranging from 0.0 to 1.0
|
|
/// that is normalized such that one component is equal to 1.0 .
|
|
|
|
const dng_vector & CameraWhite () const;
|
|
|
|
/// Getter for camera to Profile Connection Space color transform.
|
|
/// \retval A transform that takes into account all camera calibration
|
|
/// transforms and white point.
|
|
|
|
const dng_matrix & CameraToPCS () const;
|
|
|
|
/// Getter for Profile Connection Space to camera color transform.
|
|
/// \retval A transform that takes into account all camera calibration
|
|
/// transforms and white point.
|
|
|
|
const dng_matrix & PCStoCamera () const;
|
|
|
|
/// Return the XY value to use for SetWhiteXY for a given camera color
|
|
/// space coordinate as the white point.
|
|
/// \param neutral A camera color space value to use for white point.
|
|
/// Components range from 0.0 to 1.0 and should be normalized such that
|
|
/// the largest value is 1.0 .
|
|
/// \retval White point in XY space that makes neutral map to this
|
|
/// XY value as closely as possible.
|
|
|
|
dng_xy_coord NeutralToXY (const dng_vector &neutral);
|
|
|
|
private:
|
|
|
|
dng_matrix FindXYZtoCamera (const dng_xy_coord &white,
|
|
dng_matrix *forwardMatrix = NULL,
|
|
dng_matrix *reductionMatrix = NULL,
|
|
dng_matrix *cameraCalibration = NULL);
|
|
|
|
};
|
|
|
|
/*****************************************************************************/
|
|
|
|
#endif
|
|
|
|
/*****************************************************************************/
|