void QgsContrastEnhancement::readXML( const QDomElement& elem )
{
  QDomElement minValueElem = elem.firstChildElement( "minValue" );
  if ( !minValueElem.isNull() )
  {
    mMinimumValue = minValueElem.text().toDouble();
  }
  QDomElement maxValueElem = elem.firstChildElement( "maxValue" );
  if ( !maxValueElem.isNull() )
  {
    mMaximumValue = maxValueElem.text().toDouble();
  }
  QDomElement algorithmElem = elem.firstChildElement( "algorithm" );
  if ( !algorithmElem.isNull() )
  {
    QString algorithmString = algorithmElem.text();
    ContrastEnhancementAlgorithm algorithm = NoEnhancement;
    // old version ( < 19 Apr 2013) was using enum directly -> for backward compatibility
    if ( algorithmString == "0" )
    {
      algorithm = NoEnhancement;
    }
    else if ( algorithmString == "1" )
    {
      algorithm = StretchToMinimumMaximum;
    }
    else if ( algorithmString == "2" )
    {
      algorithm = StretchAndClipToMinimumMaximum;
    }
    else if ( algorithmString == "3" )
    {
      algorithm = ClipToMinimumMaximum;
    }
    else if ( algorithmString == "4" )
    {
      algorithm = UserDefinedEnhancement;
    }
    else
    {
      algorithm = contrastEnhancementAlgorithmFromString( algorithmString );
    }

    setContrastEnhancementAlgorithm( algorithm );
  }
}
void QgsContrastEnhancement::readXML( const QDomElement& elem )
{
  QDomElement minValueElem = elem.firstChildElement( "minValue" );
  if ( !minValueElem.isNull() )
  {
    mMinimumValue = minValueElem.text().toDouble();
  }
  QDomElement maxValueElem = elem.firstChildElement( "maxValue" );
  if ( !maxValueElem.isNull() )
  {
    mMaximumValue = maxValueElem.text().toDouble();
  }
  QDomElement algorithmElem = elem.firstChildElement( "algorithm" );
  if ( !algorithmElem.isNull() )
  {
    setContrastEnhancementAlgorithm(( ContrastEnhancementAlgorithm )( algorithmElem.text().toInt() ) );
  }
}
QgsContrastEnhancement::QgsContrastEnhancement( const QgsContrastEnhancement& ce )
{
  mLookupTable = nullptr;
  mContrastEnhancementFunction = nullptr;
  mEnhancementDirty = true;
  mRasterDataType = ce.mRasterDataType;

  mMinimumValue = ce.mMinimumValue;
  mMaximumValue = ce.mMaximumValue;
  mRasterDataTypeRange = ce.mRasterDataTypeRange;

  mLookupTableOffset = minimumValuePossible( mRasterDataType ) * -1;

  // setContrastEnhancementAlgorithm sets also QgsContrastEnhancementFunction
  setContrastEnhancementAlgorithm( ce.mContrastEnhancementAlgorithm, false );

  //If the data type is larger than 16-bit do not generate a lookup table
  if ( mRasterDataTypeRange <= 65535.0 )
  {
    mLookupTable = new int[static_cast <int>( mRasterDataTypeRange+1 )];
  }
}