/*****************************************************************************/ // 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 /*****************************************************************************/