28 #include <QDomDocument> 29 #include <QDomElement> 32 : mContrastEnhancementAlgorithm( NoEnhancement )
33 , mContrastEnhancementFunction( nullptr )
34 , mEnhancementDirty( false )
35 , mLookupTable( nullptr )
36 , mRasterDataType( theDataType )
40 mRasterDataTypeRange = mMaximumValue - mMinimumValue;
42 mLookupTableOffset = mMinimumValue * -1;
47 if ( mRasterDataTypeRange <= 65535.0 )
49 mLookupTable =
new int[static_cast <
int>( mRasterDataTypeRange+1 )];
55 : mContrastEnhancementFunction( nullptr )
56 , mEnhancementDirty( true )
57 , mLookupTable( nullptr )
58 , mMinimumValue( ce.mMinimumValue )
59 , mMaximumValue( ce.mMaximumValue )
60 , mRasterDataType( ce.mRasterDataType )
61 , mRasterDataTypeRange( ce.mRasterDataTypeRange )
69 if ( mRasterDataTypeRange <= 65535.0 )
71 mLookupTable =
new int[static_cast <
int>( mRasterDataTypeRange+1 )];
77 delete [] mLookupTable;
78 delete mContrastEnhancementFunction;
91 switch ( theDataType )
129 switch ( theDataType )
175 if ( mEnhancementDirty )
177 generateLookupTable();
180 if ( mLookupTable &&
NoEnhancement != mContrastEnhancementAlgorithm )
182 return mLookupTable[static_cast <
int>( theValue + mLookupTableOffset )];
189 return mContrastEnhancementFunction->
enhance( theValue );
196 bool QgsContrastEnhancement::generateLookupTable()
198 mEnhancementDirty =
false;
200 if ( !mContrastEnhancementFunction )
215 for (
int myIterator = 0; myIterator <= mRasterDataTypeRange; myIterator++ )
217 mLookupTable[myIterator] = mContrastEnhancementFunction->
enhance( static_cast< double >( myIterator ) - mLookupTableOffset );
230 if ( mContrastEnhancementFunction )
246 switch ( theAlgorithm )
249 delete mContrastEnhancementFunction;
253 delete mContrastEnhancementFunction;
257 delete mContrastEnhancementFunction;
264 delete mContrastEnhancementFunction;
269 mEnhancementDirty =
true;
270 mContrastEnhancementAlgorithm = theAlgorithm;
274 generateLookupTable();
289 delete mContrastEnhancementFunction;
290 mContrastEnhancementFunction = theFunction;
292 generateLookupTable();
312 mMaximumValue = theValue;
315 if ( mContrastEnhancementFunction )
320 mEnhancementDirty =
true;
324 generateLookupTable();
344 mMinimumValue = theValue;
347 if ( mContrastEnhancementFunction )
352 mEnhancementDirty =
true;
356 generateLookupTable();
384 if ( !minValueElem.
isNull() )
389 if ( !maxValueElem.
isNull() )
394 if ( !algorithmElem.
isNull() )
399 if ( algorithmString ==
"0" )
403 else if ( algorithmString ==
"1" )
407 else if ( algorithmString ==
"2" )
411 else if ( algorithmString ==
"3" )
415 else if ( algorithmString ==
"4" )
433 return "NoEnhancement";
435 return "StretchToMinimumMaximum";
437 return "StretchAndClipToMinimumMaximum";
439 return "ClipToMinimumMaximum";
441 return "UserDefinedEnhancement";
443 return "NoEnhancement";
448 if ( contrastEnhancementString ==
"StretchToMinimumMaximum" )
452 else if ( contrastEnhancementString ==
"StretchAndClipToMinimumMaximum" )
456 else if ( contrastEnhancementString ==
"ClipToMinimumMaximum" )
460 else if ( contrastEnhancementString ==
"UserDefinedEnhancement" )
Eight bit unsigned integer (quint8)
~QgsContrastEnhancement()
void setContrastEnhancementAlgorithm(ContrastEnhancementAlgorithm, bool generateTable=true)
Set the contrast enhancement algorithm.
void writeXML(QDomDocument &doc, QDomElement &parentElem) const
Unknown or unspecified type.
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)
Thirty two bit floating point (float)
static double maximumValuePossible(QGis::DataType)
Helper function that returns the maximum possible value for a GDAL data type.
double toDouble(bool *ok) const
double ANALYSIS_EXPORT max(double x, double y)
Returns the maximum of two doubles or the first argument if both are equal.
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.
Sixteen bit unsigned integer (quint16)
Sixty four bit floating point (double)
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32_Premultiplied.
#define QgsDebugMsgLevel(str, level)
Thirty two bit signed integer (qint32)
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.
Thirty two bit unsigned integer (quint32)
static QString contrastEnhancementAlgorithmString(ContrastEnhancementAlgorithm algorithm)
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32.
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...
Sixteen bit signed integer (qint16)
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...
double ANALYSIS_EXPORT min(double x, double y)
Returns the minimum of two doubles or the first argument if both are equal.
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.