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.
312 lines
7.3 KiB
312 lines
7.3 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_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 |
|
|
|
/*****************************************************************************/
|
|
|