Home | History | Annotate | Download | only in source
      1 /*****************************************************************************/
      2 // Copyright 2007 Adobe Systems Incorporated
      3 // All Rights Reserved.
      4 //
      5 // NOTICE:  Adobe permits you to use, modify, and distribute this file in
      6 // accordance with the terms of the Adobe license agreement accompanying it.
      7 /*****************************************************************************/
      8 
      9 /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_tone_curve.cpp#1 $ */
     10 /* $DateTime: 2012/05/30 13:28:51 $ */
     11 /* $Change: 832332 $ */
     12 /* $Author: tknoll $ */
     13 
     14 /*****************************************************************************/
     15 
     16 #include "dng_tone_curve.h"
     17 
     18 #include "dng_assertions.h"
     19 #include "dng_spline.h"
     20 #include "dng_utils.h"
     21 
     22 /******************************************************************************/
     23 
     24 dng_tone_curve::dng_tone_curve ()
     25 
     26 	:	fCoord ()
     27 
     28 	{
     29 
     30 	SetNull ();
     31 
     32 	}
     33 
     34 /******************************************************************************/
     35 
     36 bool dng_tone_curve::operator== (const dng_tone_curve &curve) const
     37 	{
     38 
     39 	return fCoord == curve.fCoord;
     40 
     41 	}
     42 
     43 /******************************************************************************/
     44 
     45 void dng_tone_curve::SetNull ()
     46 	{
     47 
     48 	fCoord.resize (2);
     49 
     50 	fCoord [0].h = 0.0;
     51 	fCoord [0].v = 0.0;
     52 
     53 	fCoord [1].h = 1.0;
     54 	fCoord [1].v = 1.0;
     55 
     56 	}
     57 
     58 /******************************************************************************/
     59 
     60 bool dng_tone_curve::IsNull () const
     61 	{
     62 
     63 	dng_tone_curve temp;
     64 
     65 	return (*this == temp);
     66 
     67 	}
     68 
     69 /******************************************************************************/
     70 
     71 void dng_tone_curve::SetInvalid ()
     72 	{
     73 
     74 	fCoord.clear ();
     75 
     76 	}
     77 
     78 /******************************************************************************/
     79 
     80 bool dng_tone_curve::IsValid () const
     81 	{
     82 
     83 	if (fCoord.size () < 2)
     84 		{
     85 
     86 		return false;
     87 
     88 		}
     89 
     90 	for (uint32 j = 0; j < fCoord.size (); j++)
     91 		{
     92 
     93 		if (fCoord [j] . h < 0.0 || fCoord [j] . h > 1.0 ||
     94 			fCoord [j] . v < 0.0 || fCoord [j] . v > 1.0)
     95 			{
     96 
     97 			return false;
     98 
     99 			}
    100 
    101 		if (j > 0)
    102 			{
    103 
    104 			if (fCoord [j] . h <= fCoord [j - 1] . h)
    105 				{
    106 
    107 				return false;
    108 
    109 				}
    110 
    111 			}
    112 
    113 		}
    114 
    115 	return true;
    116 
    117 	}
    118 
    119 /******************************************************************************/
    120 
    121 void dng_tone_curve::Solve (dng_spline_solver &solver) const
    122 	{
    123 
    124 	solver.Reset ();
    125 
    126 	for (uint32 index = 0; index < fCoord.size (); index++)
    127 		{
    128 
    129 		solver.Add (fCoord [index].h,
    130 					fCoord [index].v);
    131 
    132 		}
    133 
    134 	solver.Solve ();
    135 
    136 	}
    137 
    138 /*****************************************************************************/
    139