diff options
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_render.h')
-rw-r--r-- | gpr/source/lib/dng_sdk/dng_render.h | 312 |
1 files changed, 312 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_render.h b/gpr/source/lib/dng_sdk/dng_render.h new file mode 100644 index 0000000..4c9aec7 --- /dev/null +++ b/gpr/source/lib/dng_sdk/dng_render.h @@ -0,0 +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
+
+/*****************************************************************************/
|