diff options
Diffstat (limited to 'source/dng_render.h')
-rw-r--r-- | source/dng_render.h | 624 |
1 files changed, 312 insertions, 312 deletions
diff --git a/source/dng_render.h b/source/dng_render.h index 4c9aec7..1a7ea02 100644 --- a/source/dng_render.h +++ b/source/dng_render.h @@ -1,312 +1,312 @@ -/*****************************************************************************/
-// 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_render.h#2 $ */
-/* $DateTime: 2012/07/31 22:04:34 $ */
-/* $Change: 840853 $ */
-/* $Author: tknoll $ */
-
-/** \file
- * Classes for conversion of RAW data to final image.
- */
-
-/*****************************************************************************/
-
-#ifndef __dng_render__
-#define __dng_render__
-
-/*****************************************************************************/
-
-#include "dng_1d_function.h"
-#include "dng_auto_ptr.h"
-#include "dng_classes.h"
-#include "dng_spline.h"
-#include "dng_xy_coord.h"
-
-/******************************************************************************/
-
-/// \brief Curve for pre-exposure-compensation adjustment based on noise floor,
-/// shadows, and highlight level.
-
-class dng_function_exposure_ramp: public dng_1d_function
- {
-
- public:
-
- real64 fSlope; // Slope of straight segment.
-
- real64 fBlack; // Intercept of straight segment.
-
- real64 fRadius; // Rounding radius.
-
- real64 fQScale; // Quadradic scale.
-
- public:
-
- dng_function_exposure_ramp (real64 white,
- real64 black,
- real64 minBlack);
-
- virtual real64 Evaluate (real64 x) const;
-
- };
-
-/******************************************************************************/
-
-/// \brief Exposure compensation curve for a given compensation amount in stops using
-/// quadric for roll-off.
-
-class dng_function_exposure_tone: public dng_1d_function
- {
-
- protected:
-
- bool fIsNOP; // Is this a NOP function?
-
- real64 fSlope; // Slope for lower part of curve.
-
- real64 a; // Quadradic parameters for upper two f-stops.
- real64 b;
- real64 c;
-
- public:
-
- dng_function_exposure_tone (real64 exposure);
-
- /// Returns output value for a given input tone.
-
- virtual real64 Evaluate (real64 x) const;
-
- };
-
-/*****************************************************************************/
-
-/// Default ACR3 tone curve.
-
-class dng_tone_curve_acr3_default: public dng_1d_function
- {
-
- public:
-
- /// Returns output value for a given input tone.
-
- virtual real64 Evaluate (real64 x) const;
-
- /// Returns nearest input value for a given output tone.
-
- virtual real64 EvaluateInverse (real64 x) const;
-
- static const dng_1d_function & Get ();
-
- };
-
-/*****************************************************************************/
-
-/// \brief Encoding gamma curve for a given color space.
-
-class dng_function_gamma_encode: public dng_1d_function
- {
-
- protected:
-
- const dng_color_space &fSpace;
-
- public:
-
- dng_function_gamma_encode (const dng_color_space &space);
-
- virtual real64 Evaluate (real64 x) const;
-
- };
-
-/*****************************************************************************/
-
-/// \brief Class used to render digital negative to displayable image.
-
-class dng_render
- {
-
- protected:
-
- dng_host &fHost;
-
- const dng_negative &fNegative;
-
- dng_xy_coord fWhiteXY;
-
- real64 fExposure;
-
- real64 fShadows;
-
- const dng_1d_function *fToneCurve;
-
- const dng_color_space *fFinalSpace;
-
- uint32 fFinalPixelType;
-
- uint32 fMaximumSize;
-
- private:
-
- AutoPtr<dng_spline_solver> fProfileToneCurve;
-
- public:
-
- /// Construct a rendering instance that will be used to convert a given digital negative.
- /// \param host The host to use for memory allocation, progress updates, and abort testing.
- /// \param negative The digital negative to convert to a displayable image.
-
- dng_render (dng_host &host,
- const dng_negative &negative);
-
- virtual ~dng_render ()
- {
- }
-
- /// Set the white point to be used for conversion.
- /// \param white White point to use.
-
- void SetWhiteXY (const dng_xy_coord &white)
- {
- fWhiteXY = white;
- }
-
- /// Get the white point to be used for conversion.
- /// \retval White point to use.
-
- const dng_xy_coord WhiteXY () const
- {
- return fWhiteXY;
- }
-
- /// Set exposure compensation.
- /// \param exposure Compensation value in stops, positive or negative.
-
- void SetExposure (real64 exposure)
- {
- fExposure = exposure;
- }
-
- /// Get exposure compensation.
- /// \retval Compensation value in stops, positive or negative.
-
- real64 Exposure () const
- {
- return fExposure;
- }
-
- /// Set shadow clip amount.
- /// \param shadows Shadow clip amount.
-
- void SetShadows (real64 shadows)
- {
- fShadows = shadows;
- }
-
- /// Get shadow clip amount.
- /// \retval Shadow clip amount.
-
- real64 Shadows () const
- {
- return fShadows;
- }
-
- /// Set custom tone curve for conversion.
- /// \param curve 1D function that defines tone mapping to use during conversion.
-
- void SetToneCurve (const dng_1d_function &curve)
- {
- fToneCurve = &curve;
- }
-
- /// Get custom tone curve for conversion.
- /// \retval 1D function that defines tone mapping to use during conversion.
-
- const dng_1d_function & ToneCurve () const
- {
- return *fToneCurve;
- }
-
- /// Set final color space in which resulting image data should be represented.
- /// (See dng_color_space.h for possible values.)
- /// \param space Color space to use.
-
- void SetFinalSpace (const dng_color_space &space)
- {
- fFinalSpace = &space;
- }
-
- /// Get final color space in which resulting image data should be represented.
- /// \retval Color space to use.
-
- const dng_color_space & FinalSpace () const
- {
- return *fFinalSpace;
- }
-
- /// Set pixel type of final image data.
- /// Can be ttByte (default), ttShort, or ttFloat.
- /// \param type Pixel type to use.
-
- void SetFinalPixelType (uint32 type)
- {
- fFinalPixelType = type;
- }
-
- /// Get pixel type of final image data.
- /// Can be ttByte (default), ttShort, or ttFloat.
- /// \retval Pixel type to use.
-
- uint32 FinalPixelType () const
- {
- return fFinalPixelType;
- }
-
- /// Set maximum dimension, in pixels, of resulting image.
- /// If final image would have either dimension larger than maximum, the larger
- /// of the two dimensions is set to this maximum size and the smaller dimension
- /// is adjusted to preserve aspect ratio.
- /// \param size Maximum size to allow.
-
- void SetMaximumSize (uint32 size)
- {
- fMaximumSize = size;
- }
-
- /// Get maximum dimension, in pixels, of resulting image.
- /// If the final image would have either dimension larger than this maximum, the larger
- /// of the two dimensions is set to this maximum size and the smaller dimension
- /// is adjusted to preserve the image's aspect ratio.
- /// \retval Maximum allowed size.
-
- uint32 MaximumSize () const
- {
- return fMaximumSize;
- }
-
- /// Actually render a digital negative to a displayable image.
- /// Input digital negative is passed to the constructor of this dng_render class.
- /// \retval The final resulting image.
-
- virtual dng_image * Render ();
-
- private:
-
- // Hidden copy constructor and assignment operator.
-
- dng_render (const dng_render &render);
-
- dng_render & operator= (const dng_render &render);
-
- };
-
-/*****************************************************************************/
-
-#endif
-
-/*****************************************************************************/
+/*****************************************************************************/ +// 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_render.h#2 $ */ +/* $DateTime: 2012/07/31 22:04:34 $ */ +/* $Change: 840853 $ */ +/* $Author: tknoll $ */ + +/** \file + * Classes for conversion of RAW data to final image. + */ + +/*****************************************************************************/ + +#ifndef __dng_render__ +#define __dng_render__ + +/*****************************************************************************/ + +#include "dng_1d_function.h" +#include "dng_auto_ptr.h" +#include "dng_classes.h" +#include "dng_spline.h" +#include "dng_xy_coord.h" + +/******************************************************************************/ + +/// \brief Curve for pre-exposure-compensation adjustment based on noise floor, +/// shadows, and highlight level. + +class dng_function_exposure_ramp: public dng_1d_function + { + + public: + + real64 fSlope; // Slope of straight segment. + + real64 fBlack; // Intercept of straight segment. + + real64 fRadius; // Rounding radius. + + real64 fQScale; // Quadradic scale. + + public: + + dng_function_exposure_ramp (real64 white, + real64 black, + real64 minBlack); + + virtual real64 Evaluate (real64 x) const; + + }; + +/******************************************************************************/ + +/// \brief Exposure compensation curve for a given compensation amount in stops using +/// quadric for roll-off. + +class dng_function_exposure_tone: public dng_1d_function + { + + protected: + + bool fIsNOP; // Is this a NOP function? + + real64 fSlope; // Slope for lower part of curve. + + real64 a; // Quadradic parameters for upper two f-stops. + real64 b; + real64 c; + + public: + + dng_function_exposure_tone (real64 exposure); + + /// Returns output value for a given input tone. + + virtual real64 Evaluate (real64 x) const; + + }; + +/*****************************************************************************/ + +/// Default ACR3 tone curve. + +class dng_tone_curve_acr3_default: public dng_1d_function + { + + public: + + /// Returns output value for a given input tone. + + virtual real64 Evaluate (real64 x) const; + + /// Returns nearest input value for a given output tone. + + virtual real64 EvaluateInverse (real64 x) const; + + static const dng_1d_function & Get (); + + }; + +/*****************************************************************************/ + +/// \brief Encoding gamma curve for a given color space. + +class dng_function_gamma_encode: public dng_1d_function + { + + protected: + + const dng_color_space &fSpace; + + public: + + dng_function_gamma_encode (const dng_color_space &space); + + virtual real64 Evaluate (real64 x) const; + + }; + +/*****************************************************************************/ + +/// \brief Class used to render digital negative to displayable image. + +class dng_render + { + + protected: + + dng_host &fHost; + + const dng_negative &fNegative; + + dng_xy_coord fWhiteXY; + + real64 fExposure; + + real64 fShadows; + + const dng_1d_function *fToneCurve; + + const dng_color_space *fFinalSpace; + + uint32 fFinalPixelType; + + uint32 fMaximumSize; + + private: + + AutoPtr<dng_spline_solver> fProfileToneCurve; + + public: + + /// Construct a rendering instance that will be used to convert a given digital negative. + /// \param host The host to use for memory allocation, progress updates, and abort testing. + /// \param negative The digital negative to convert to a displayable image. + + dng_render (dng_host &host, + const dng_negative &negative); + + virtual ~dng_render () + { + } + + /// Set the white point to be used for conversion. + /// \param white White point to use. + + void SetWhiteXY (const dng_xy_coord &white) + { + fWhiteXY = white; + } + + /// Get the white point to be used for conversion. + /// \retval White point to use. + + const dng_xy_coord WhiteXY () const + { + return fWhiteXY; + } + + /// Set exposure compensation. + /// \param exposure Compensation value in stops, positive or negative. + + void SetExposure (real64 exposure) + { + fExposure = exposure; + } + + /// Get exposure compensation. + /// \retval Compensation value in stops, positive or negative. + + real64 Exposure () const + { + return fExposure; + } + + /// Set shadow clip amount. + /// \param shadows Shadow clip amount. + + void SetShadows (real64 shadows) + { + fShadows = shadows; + } + + /// Get shadow clip amount. + /// \retval Shadow clip amount. + + real64 Shadows () const + { + return fShadows; + } + + /// Set custom tone curve for conversion. + /// \param curve 1D function that defines tone mapping to use during conversion. + + void SetToneCurve (const dng_1d_function &curve) + { + fToneCurve = &curve; + } + + /// Get custom tone curve for conversion. + /// \retval 1D function that defines tone mapping to use during conversion. + + const dng_1d_function & ToneCurve () const + { + return *fToneCurve; + } + + /// Set final color space in which resulting image data should be represented. + /// (See dng_color_space.h for possible values.) + /// \param space Color space to use. + + void SetFinalSpace (const dng_color_space &space) + { + fFinalSpace = &space; + } + + /// Get final color space in which resulting image data should be represented. + /// \retval Color space to use. + + const dng_color_space & FinalSpace () const + { + return *fFinalSpace; + } + + /// Set pixel type of final image data. + /// Can be ttByte (default), ttShort, or ttFloat. + /// \param type Pixel type to use. + + void SetFinalPixelType (uint32 type) + { + fFinalPixelType = type; + } + + /// Get pixel type of final image data. + /// Can be ttByte (default), ttShort, or ttFloat. + /// \retval Pixel type to use. + + uint32 FinalPixelType () const + { + return fFinalPixelType; + } + + /// Set maximum dimension, in pixels, of resulting image. + /// If final image would have either dimension larger than maximum, the larger + /// of the two dimensions is set to this maximum size and the smaller dimension + /// is adjusted to preserve aspect ratio. + /// \param size Maximum size to allow. + + void SetMaximumSize (uint32 size) + { + fMaximumSize = size; + } + + /// Get maximum dimension, in pixels, of resulting image. + /// If the final image would have either dimension larger than this maximum, the larger + /// of the two dimensions is set to this maximum size and the smaller dimension + /// is adjusted to preserve the image's aspect ratio. + /// \retval Maximum allowed size. + + uint32 MaximumSize () const + { + return fMaximumSize; + } + + /// Actually render a digital negative to a displayable image. + /// Input digital negative is passed to the constructor of this dng_render class. + /// \retval The final resulting image. + + virtual dng_image * Render (); + + private: + + // Hidden copy constructor and assignment operator. + + dng_render (const dng_render &render); + + dng_render & operator= (const dng_render &render); + + }; + +/*****************************************************************************/ + +#endif + +/*****************************************************************************/ |