24 #include <QDomDocument> 
   25 #include <QDomElement> 
   29   return mTransparentSingleValuePixelList;
 
   34   return mTransparentThreeValuePixelList;
 
   40   mTransparentSingleValuePixelList.clear();
 
   44   myTransparentSingleValuePixel.
min = value;
 
   45   myTransparentSingleValuePixel.
max = value;
 
   47   mTransparentSingleValuePixelList.append( myTransparentSingleValuePixel );
 
   53   mTransparentThreeValuePixelList.clear();
 
   57   myTransparentThreeValuePixel.
red = redValue;
 
   58   myTransparentThreeValuePixel.
green = greenValue;
 
   59   myTransparentThreeValuePixel.
blue = blueValue;
 
   61   mTransparentThreeValuePixelList.append( myTransparentThreeValuePixel );
 
   66   mTransparentSingleValuePixelList = newList;
 
   71   mTransparentThreeValuePixelList = newList;
 
   77   if ( std::isnan( value ) )
 
   83   bool myTransparentPixelFound = 
false;
 
   85   for ( 
int myListRunner = 0; myListRunner < mTransparentSingleValuePixelList.count(); myListRunner++ )
 
   87     myTransparentPixel = mTransparentSingleValuePixelList[myListRunner];
 
   88     if ( ( value >= myTransparentPixel.
min && value <= myTransparentPixel.
max ) ||
 
   92       myTransparentPixelFound = 
true;
 
   98   if ( myTransparentPixelFound )
 
  100     return static_cast< int >( 
static_cast< float >( globalTransparency ) * ( 1.0 - ( myTransparentPixel.
percentTransparent / 100.0 ) ) );
 
  103   return globalTransparency;
 
  109   if ( std::isnan( redValue ) || std::isnan( greenValue ) || std::isnan( blueValue ) )
 
  115   bool myTransparentPixelFound = 
false;
 
  117   for ( 
int myListRunner = 0; myListRunner < mTransparentThreeValuePixelList.count(); myListRunner++ )
 
  119     myTransparentPixel = mTransparentThreeValuePixelList[myListRunner];
 
  126           myTransparentPixelFound = 
true;
 
  134   if ( myTransparentPixelFound )
 
  136     return static_cast< int >( 
static_cast< float >( globalTransparency ) * ( 1.0 - ( myTransparentPixel.
percentTransparent / 100.0 ) ) );
 
  139   return globalTransparency;
 
  144   return mTransparentSingleValuePixelList.isEmpty() && mTransparentThreeValuePixelList.isEmpty();
 
  149   QDomElement rasterTransparencyElem = doc.createElement( QStringLiteral( 
"rasterTransparency" ) );
 
  150   if ( !mTransparentSingleValuePixelList.isEmpty() )
 
  152     QDomElement singleValuePixelListElement = doc.createElement( QStringLiteral( 
"singleValuePixelList" ) );
 
  153     QList<QgsRasterTransparency::TransparentSingleValuePixel>::const_iterator it = mTransparentSingleValuePixelList.constBegin();
 
  154     for ( ; it != mTransparentSingleValuePixelList.constEnd(); ++it )
 
  156       QDomElement pixelListElement = doc.createElement( QStringLiteral( 
"pixelListEntry" ) );
 
  159       pixelListElement.setAttribute( QStringLiteral( 
"percentTransparent" ), QString::number( it->percentTransparent ) );
 
  160       singleValuePixelListElement.appendChild( pixelListElement );
 
  162     rasterTransparencyElem.appendChild( singleValuePixelListElement );
 
  165   if ( !mTransparentThreeValuePixelList.isEmpty() )
 
  167     QDomElement threeValuePixelListElement = doc.createElement( QStringLiteral( 
"threeValuePixelList" ) );
 
  168     QList<QgsRasterTransparency::TransparentThreeValuePixel>::const_iterator it = mTransparentThreeValuePixelList.constBegin();
 
  169     for ( ; it != mTransparentThreeValuePixelList.constEnd(); ++it )
 
  171       QDomElement pixelListElement = doc.createElement( QStringLiteral( 
"pixelListEntry" ) );
 
  175       pixelListElement.setAttribute( QStringLiteral( 
"percentTransparent" ), QString::number( it->percentTransparent ) );
 
  176       threeValuePixelListElement.appendChild( pixelListElement );
 
  178     rasterTransparencyElem.appendChild( threeValuePixelListElement );
 
  180   parentElem.appendChild( rasterTransparencyElem );
 
  190   mTransparentSingleValuePixelList.clear();
 
  191   mTransparentThreeValuePixelList.clear();
 
  192   QDomElement currentEntryElem;
 
  194   QDomElement singlePixelListElem = elem.firstChildElement( QStringLiteral( 
"singleValuePixelList" ) );
 
  195   if ( !singlePixelListElem.isNull() )
 
  197     QDomNodeList entryList = singlePixelListElem.elementsByTagName( QStringLiteral( 
"pixelListEntry" ) );
 
  199     for ( 
int i = 0; i < entryList.size(); ++i )
 
  201       currentEntryElem = entryList.at( i ).toElement();
 
  202       sp.
percentTransparent = currentEntryElem.attribute( QStringLiteral( 
"percentTransparent" ) ).toDouble();
 
  204       if ( currentEntryElem.hasAttribute( QStringLiteral( 
"pixelValue" ) ) )
 
  206         sp.
min = sp.
max = currentEntryElem.attribute( QStringLiteral( 
"pixelValue" ) ).toDouble();
 
  210         sp.
min = currentEntryElem.attribute( QStringLiteral( 
"min" ) ).toDouble();
 
  211         sp.
max = currentEntryElem.attribute( QStringLiteral( 
"max" ) ).toDouble();
 
  213       mTransparentSingleValuePixelList.append( sp );
 
  216   QDomElement threeValuePixelListElem = elem.firstChildElement( QStringLiteral( 
"threeValuePixelList" ) );
 
  217   if ( !threeValuePixelListElem.isNull() )
 
  219     QDomNodeList entryList = threeValuePixelListElem.elementsByTagName( QStringLiteral( 
"pixelListEntry" ) );
 
  221     for ( 
int i = 0; i < entryList.size(); ++i )
 
  223       currentEntryElem = entryList.at( i ).toElement();
 
  224       tp.
red = currentEntryElem.attribute( QStringLiteral( 
"red" ) ).toDouble();
 
  225       tp.
green = currentEntryElem.attribute( QStringLiteral( 
"green" ) ).toDouble();
 
  226       tp.
blue = currentEntryElem.attribute( QStringLiteral( 
"blue" ) ).toDouble();
 
  227       tp.
percentTransparent = currentEntryElem.attribute( QStringLiteral( 
"percentTransparent" ) ).toDouble();
 
  228       mTransparentThreeValuePixelList.append( tp );
 
static QString printValue(double value)
Print double value with all necessary significant digits.
void setTransparentSingleValuePixelList(const QList< QgsRasterTransparency::TransparentSingleValuePixel > &newList)
Sets the transparent single value pixel list, replacing the whole existing list.
QList< QgsRasterTransparency::TransparentThreeValuePixel > transparentThreeValuePixelList() const
Returns the transparent three value pixel list.
void setTransparentThreeValuePixelList(const QList< QgsRasterTransparency::TransparentThreeValuePixel > &newList)
Sets the transparent three value pixel list, replacing the whole existing list.
int alphaValue(double value, int globalTransparency=255) const
Returns the transparency value for a single value pixel.
void initializeTransparentPixelList(double value)
Resets the transparency list to a single value.
void writeXml(QDomDocument &doc, QDomElement &parentElem) const
Writes the transparency information to an XML document.
QList< QgsRasterTransparency::TransparentSingleValuePixel > transparentSingleValuePixelList() const
Returns the transparent single value pixel list.
bool isEmpty() const
True if there are no entries in the pixel lists except the nodata value.
void readXml(const QDomElement &elem)
Reads the transparency information from an XML document.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
double percentTransparent
double percentTransparent