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