28 #include <QDomDocument>
29 #include <QDomElement>
34 mContrastEnhancementFunction = 0;
35 mEnhancementDirty =
false;
37 mRasterDataType = theDataType;
41 mRasterDataTypeRange = mMaximumValue - mMinimumValue;
43 mLookupTableOffset = mMinimumValue * -1;
48 if ( mRasterDataTypeRange <= 65535.0 )
50 mLookupTable =
new int[static_cast <
int>( mRasterDataTypeRange+1 )];
58 mContrastEnhancementFunction = 0;
59 mEnhancementDirty =
true;
60 mRasterDataType = ce.mRasterDataType;
62 mMinimumValue = ce.mMinimumValue;
63 mMaximumValue = ce.mMaximumValue;
64 mRasterDataTypeRange = ce.mRasterDataTypeRange;
72 if ( mRasterDataTypeRange <= 65535.0 )
74 mLookupTable =
new int[static_cast <
int>( mRasterDataTypeRange+1 )];
80 delete [] mLookupTable;
81 delete mContrastEnhancementFunction;
94 switch ( theDataType )
143 switch ( theDataType )
200 if ( mEnhancementDirty )
202 generateLookupTable();
205 if ( mLookupTable &&
NoEnhancement != mContrastEnhancementAlgorithm )
207 return mLookupTable[static_cast <
int>( theValue + mLookupTableOffset )];
214 return mContrastEnhancementFunction->
enhance( theValue );
221 bool QgsContrastEnhancement::generateLookupTable()
223 mEnhancementDirty =
false;
225 if ( !mContrastEnhancementFunction )
240 for (
int myIterator = 0; myIterator <= mRasterDataTypeRange; myIterator++ )
242 mLookupTable[myIterator] = mContrastEnhancementFunction->
enhance((
double )myIterator - mLookupTableOffset );
256 if ( 0 != mContrastEnhancementFunction )
274 if ( theAlgorithm != mContrastEnhancementAlgorithm )
276 switch ( theAlgorithm )
295 mEnhancementDirty =
true;
296 mContrastEnhancementAlgorithm = theAlgorithm;
300 generateLookupTable();
314 if ( 0 != theFunction )
316 mContrastEnhancementFunction = theFunction;
318 generateLookupTable();
338 mMaximumValue = theValue;
341 if ( 0 != mContrastEnhancementFunction )
346 mEnhancementDirty =
true;
350 generateLookupTable();
370 mMinimumValue = theValue;
373 if ( 0 != mContrastEnhancementFunction )
378 mEnhancementDirty =
true;
382 generateLookupTable();
410 if ( !minValueElem.
isNull() )
415 if ( !maxValueElem.
isNull() )
420 if ( !algorithmElem.
isNull() )
425 if ( algorithmString ==
"0" )
429 else if ( algorithmString ==
"1" )
433 else if ( algorithmString ==
"2" )
437 else if ( algorithmString ==
"3" )
441 else if ( algorithmString ==
"4" )
459 return "NoEnhancement";
461 return "StretchToMinimumMaximum";
463 return "StretchAndClipToMinimumMaximum";
465 return "ClipToMinimumMaximum";
467 return "UserDefinedEnhancement";
469 return "NoEnhancement";
474 if ( contrastEnhancementString ==
"StretchToMinimumMaximum" )
478 else if ( contrastEnhancementString ==
"StretchAndClipToMinimumMaximum" )
482 else if ( contrastEnhancementString ==
"ClipToMinimumMaximum" )
486 else if ( contrastEnhancementString ==
"UserDefinedEnhancement" )
~QgsContrastEnhancement()
void setContrastEnhancementAlgorithm(ContrastEnhancementAlgorithm, bool generateTable=true)
Set the contrast enhancement algorithm.
void writeXML(QDomDocument &doc, QDomElement &parentElem) const
void readXML(const QDomElement &elem)
QDomNode appendChild(const QDomNode &newChild)
bool isValueInDisplayableRange(double)
Return true if pixel is in stretable range, false if pixel is outside of range (i.e., clipped)
static double maximumValuePossible(QGis::DataType)
Helper function that returns the maximum possible value for a GDAL data type.
double toDouble(bool *ok) const
void setContrastEnhancementFunction(QgsContrastEnhancementFunction *)
A public method that allows the user to set their own custom contrast enhancment function.
void setMinimumValue(double)
Mutator for the minimum value.
QString number(int n, int base)
static double minimumValuePossible(QGis::DataType)
Helper function that returns the minimum possible value for a GDAL data type.
A linear enhanceContrast enhancement that first clips to min max and then enhanceContrastes linearly ...
void setMinimumValue(double, bool generateTable=true)
Return the minimum value for the contrast enhancement range.
static QString contrastEnhancementAlgorithmString(ContrastEnhancementAlgorithm algorithm)
A contrast enhancement funcion is the base class for all raster contrast enhancements.
A color enhancement function that performs a linear enhanceContrast between min and max...
QDomText createTextNode(const QString &value)
QgsContrastEnhancement(QGis::DataType theDatatype=QGis::Byte)
static ContrastEnhancementAlgorithm contrastEnhancementAlgorithmFromString(const QString &contrastEnhancementString)
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used...
A raster contrast enhancement that will clip a value to the specified min/max range.
int enhanceContrast(double)
Apply the contrast enhancement to a value.
QDomElement firstChildElement(const QString &tagName) const
DataType
Raster data types.
virtual int enhance(double)
A customizable method that takes in a double and returns a int between 0 and 255. ...
virtual bool isValueInDisplayableRange(double)
A customicable method to indicate if the pixels is displayable.
Manipulates raster pixel values so that they enhanceContrast or clip into a specified numerical range...
QDomElement createElement(const QString &tagName)
void setMaximumValue(double, bool generateTable=true)
Set the maximum value for the contrast enhancement range.
void setMaximumValue(double)
Mustator for the maximum value.