30#include <QDomDocument> 
   36#include <QRegularExpression> 
   39const int QgsPalettedRasterRenderer::MAX_FLOAT_CLASSES = 65536;
 
   46  QHash<QString, QHash<QColor, QVector<QVariant>>> classData;
 
   48  classData.reserve( 
classes.size() );
 
   50  QVector<QString> labels;
 
   51  labels.reserve( 
classes.size() );
 
   55    if ( !classData.contains( klass.label ) )
 
   57      labels.push_back( klass.label );
 
   59    classData[klass.label][klass.color].push_back( klass.value );
 
   62  mMultiValueClassData.reserve( classData.size() );
 
   64  for ( 
auto labelIt = labels.constBegin(); labelIt != labels.constEnd(); ++labelIt )
 
   66    for ( 
auto colorIt = classData[*labelIt].constBegin(); colorIt != classData[*labelIt].constEnd(); ++colorIt )
 
   68      mMultiValueClassData.push_back( 
MultiValueClass{ colorIt.value(), colorIt.key(), *labelIt } );
 
 
   78  , mMultiValueClassData( classes )
 
   86  auto renderer = std::make_unique< QgsPalettedRasterRenderer >( 
nullptr, mBand, mMultiValueClassData );
 
   88  if ( mSourceColorRamp )
 
   89    renderer->setSourceColorRamp( mSourceColorRamp->clone() );
 
   91  renderer->copyCommonProperties( 
this );
 
   93  return renderer.release();
 
 
  108  const int bandNumber = elem.attribute( QStringLiteral( 
"band" ), QStringLiteral( 
"-1" ) ).toInt();
 
  111  const QDomElement paletteElem = elem.firstChildElement( QStringLiteral( 
"colorPalette" ) );
 
  112  if ( !paletteElem.isNull() )
 
  114    const QDomNodeList paletteEntries = paletteElem.elementsByTagName( QStringLiteral( 
"paletteEntry" ) );
 
  116    QDomElement entryElem;
 
  119    for ( 
int i = 0; i < paletteEntries.size(); ++i )
 
  123      entryElem = paletteEntries.at( i ).toElement();
 
  124      value = entryElem.attribute( QStringLiteral( 
"value" ), QStringLiteral( 
"0" ) ).toDouble();
 
  125      color = QColor( entryElem.attribute( QStringLiteral( 
"color" ), QStringLiteral( 
"#000000" ) ) );
 
  126      color.setAlpha( entryElem.attribute( QStringLiteral( 
"alpha" ), QStringLiteral( 
"255" ) ).toInt() );
 
  127      label = entryElem.attribute( QStringLiteral( 
"label" ) );
 
  128      QgsDebugMsgLevel( QStringLiteral( 
"Value: %1, label: %2, color: %3" ).arg( value ).arg( 
label, entryElem.attribute( QStringLiteral( 
"color" ) ) ), 4 );
 
  137  QDomElement sourceColorRampElem = elem.firstChildElement( QStringLiteral( 
"colorramp" ) );
 
  138  if ( !sourceColorRampElem.isNull() && sourceColorRampElem.attribute( QStringLiteral( 
"name" ) ) == QLatin1String( 
"[source]" ) )
 
 
  153  return mMultiValueClassData;
 
 
  158  mMultiValueClassData = 
classes;
 
 
  164  if ( ! mMultiValueClassData.isEmpty() )
 
  166    const auto constMClassData = mMultiValueClassData;
 
  169      if ( 
c.values.contains( idx ) )
 
 
  179  MultiValueClassData::iterator cMvIt = mMultiValueClassData.begin();
 
  180  for ( ; cMvIt != mMultiValueClassData.end(); ++cMvIt )
 
  182    if ( cMvIt->values.contains( idx ) )
 
  184      cMvIt->label = 
label;
 
 
  212  auto outputBlock = std::make_unique<QgsRasterBlock>();
 
  213  if ( !
mInput || mMultiValueClassData.isEmpty() )
 
  215    return outputBlock.release();
 
  218  const std::shared_ptr< QgsRasterBlock > inputBlock( 
mInput->
block( mBand, 
extent, width, height, feedback ) );
 
  220  if ( !inputBlock || inputBlock->isEmpty() )
 
  223    return outputBlock.release();
 
  229  std::shared_ptr< QgsRasterBlock > alphaBlock;
 
  234    if ( !alphaBlock || alphaBlock->isEmpty() )
 
  236      return outputBlock.release();
 
  241    alphaBlock = inputBlock;
 
  246    return outputBlock.release();
 
  253  Q_ASSERT( outputBlock ); 
 
  254  unsigned int *outputData = ( 
unsigned int * )( outputBlock->bits() );
 
  257  bool isNoData = 
false;
 
  258  for ( 
qgssize i = 0; i < rasterSize; ++i )
 
  260    const double value = inputBlock->valueAndNoData( i, isNoData );
 
  263      outputData[i] = myDefaultColor;
 
  266    if ( !mColors.contains( value ) )
 
  268      outputData[i] = myDefaultColor;
 
  272    if ( !hasTransparency )
 
  274      outputData[i] = mColors.value( value );
 
  285        const double alpha = alphaBlock->value( i );
 
  288          outputBlock->setColor( i, myDefaultColor );
 
  293          currentOpacity *= alpha / 255.0;
 
  297      const QRgb 
c = mColors.value( value );
 
  298      outputData[i] = qRgba( currentOpacity * qRed( 
c ), currentOpacity * qGreen( 
c ), currentOpacity * qBlue( 
c ), currentOpacity * qAlpha( 
c ) );
 
  302  return outputBlock.release();
 
 
  307  return mMultiValueClassData.size();
 
 
  312  if ( parentElem.isNull() )
 
  317  QDomElement rasterRendererElem = doc.createElement( QStringLiteral( 
"rasterrenderer" ) );
 
  320  rasterRendererElem.setAttribute( QStringLiteral( 
"band" ), mBand );
 
  321  QDomElement colorPaletteElem = doc.createElement( QStringLiteral( 
"colorPalette" ) );
 
  322  const ClassData klassData { classData() };
 
  323  ClassData::const_iterator it = klassData.constBegin();
 
  324  for ( ; it != klassData.constEnd(); ++it )
 
  326    const QColor color = it->color;
 
  327    QDomElement colorElem = doc.createElement( QStringLiteral( 
"paletteEntry" ) );
 
  328    colorElem.setAttribute( QStringLiteral( 
"value" ), it->value );
 
  329    colorElem.setAttribute( QStringLiteral( 
"color" ), color.name() );
 
  330    colorElem.setAttribute( QStringLiteral( 
"alpha" ), color.alpha() );
 
  331    if ( !it->label.isEmpty() )
 
  333      colorElem.setAttribute( QStringLiteral( 
"label" ), it->label );
 
  335    colorPaletteElem.appendChild( colorElem );
 
  337  rasterRendererElem.appendChild( colorPaletteElem );
 
  340  if ( mSourceColorRamp )
 
  343    rasterRendererElem.appendChild( colorRampElem );
 
  346  parentElem.appendChild( rasterRendererElem );
 
 
  353  toSld( doc, element, context );
 
 
  362  const QDomNodeList elements = element.elementsByTagName( QStringLiteral( 
"sld:RasterSymbolizer" ) );
 
  363  if ( elements.size() == 0 )
 
  367  QDomElement rasterSymbolizerElem = elements.at( 0 ).toElement();
 
  370  QDomElement channelSelectionElem = doc.createElement( QStringLiteral( 
"sld:ChannelSelection" ) );
 
  371  rasterSymbolizerElem.appendChild( channelSelectionElem );
 
  374  QDomElement channelElem = doc.createElement( QStringLiteral( 
"sld:GrayChannel" ) );
 
  375  channelSelectionElem.appendChild( channelElem );
 
  378  QDomElement sourceChannelNameElem = doc.createElement( QStringLiteral( 
"sld:SourceChannelName" ) );
 
  379  sourceChannelNameElem.appendChild( doc.createTextNode( QString::number( mBand ) ) );
 
  380  channelElem.appendChild( sourceChannelNameElem );
 
  383  QDomElement colorMapElem = doc.createElement( QStringLiteral( 
"sld:ColorMap" ) );
 
  384  colorMapElem.setAttribute( QStringLiteral( 
"type" ), QStringLiteral( 
"values" ) );
 
  385  if ( this->
classes().size() >= 255 )
 
  386    colorMapElem.setAttribute( QStringLiteral( 
"extended" ), QStringLiteral( 
"true" ) );
 
  387  rasterSymbolizerElem.appendChild( colorMapElem );
 
  391  const QList<QgsPalettedRasterRenderer::Class> 
classes = this->
classes();
 
  392  QList<QgsPalettedRasterRenderer::Class>::const_iterator classDataIt = 
classes.constBegin();
 
  393  for ( ; classDataIt != 
classes.constEnd();  ++classDataIt )
 
  395    QDomElement colorMapEntryElem = doc.createElement( QStringLiteral( 
"sld:ColorMapEntry" ) );
 
  396    colorMapElem.appendChild( colorMapEntryElem );
 
  399    colorMapEntryElem.setAttribute( QStringLiteral( 
"color" ), classDataIt->color.name() );
 
  400    colorMapEntryElem.setAttribute( QStringLiteral( 
"quantity" ), QString::number( classDataIt->value ) );
 
  401    colorMapEntryElem.setAttribute( QStringLiteral( 
"label" ), classDataIt->label );
 
  402    if ( classDataIt->color.alphaF() != 1.0 )
 
  404      colorMapEntryElem.setAttribute( QStringLiteral( 
"opacity" ), QString::number( classDataIt->color.alphaF() ) );
 
 
  412  if ( mSourceColorRamp )
 
 
  424  QList< QPair< QString, QColor > > symbolItems;
 
  427    QString lab { classData.label };
 
  431      for ( 
const QVariant &val : std::as_const( classData.values ) )
 
  435        const double numericValue { val.toDouble( &ok ) };
 
  438          values.push_back( QLocale().toString( numericValue ) );
 
  442          values.push_back( val.toString() );
 
  445      lab = values.join( QChar( 
' ' ) );
 
  447    symbolItems << qMakePair( lab, classData.color );
 
 
  455  QList<QgsLayerTreeModelLegendNode *> res;
 
  458  if ( !name.isEmpty() )
 
  464  res.reserve( res.size() + items.size() );
 
  465  for ( 
const QPair< QString, QColor > &item : items )
 
 
  486  mSourceColorRamp.reset( ramp );
 
 
  491  return mSourceColorRamp.get();
 
 
  496  QList<QgsColorRampShader::ColorRampItem>::const_iterator colorIt = table.constBegin();
 
  498  for ( ; colorIt != table.constEnd(); ++colorIt )
 
 
  507  if ( ! attributeTable || ! attributeTable->
isValid() )
 
  514  const QList<QgsRasterAttributeTable::MinMaxClass> minMaxClasses { attributeTable->
minMaxClasses( classificationColumn ) };
 
  515  if ( minMaxClasses.empty() )
 
  520    QVector<QVariant> values;
 
  521    for ( 
const double val : std::as_const( minMaxClass.minMaxValues ) )
 
  523      values.push_back( QVariant( val ) );
 
  525    classData.push_back( { values, minMaxClass.color, minMaxClass.name  } );
 
  528  int numClasses { 
static_cast<int>( classData.count( ) ) };
 
  531  if ( ramp && numClasses > 0 )
 
  539      randomRamp->setTotalColorCount( numClasses );
 
  542    if ( numClasses > 1 )
 
  545    QgsPalettedRasterRenderer::MultiValueClassData::iterator cIt = classData.begin();
 
  546    for ( ; cIt != classData.end(); ++cIt )
 
  548      cIt->color = ramp->
color( i / 
static_cast<double>( numClasses ) );
 
 
  560  const thread_local QRegularExpression linePartRx( QStringLiteral( 
"[\\s,:]+" ) );
 
  562  const QStringList parts = 
string.split( 
'\n', Qt::SkipEmptyParts );
 
  563  for ( 
const QString &part : parts )
 
  565    const QStringList lineParts = part.split( linePartRx, Qt::SkipEmptyParts );
 
  567    switch ( lineParts.count() )
 
  571        const int value = lineParts.at( 0 ).toInt( &ok );
 
  581        const int value = lineParts.at( 0 ).toInt( &ok );
 
  585        const QColor 
c( lineParts.at( 1 ) );
 
  593        if ( lineParts.count() < 4 )
 
  596        const int value = lineParts.at( 0 ).toInt( &ok );
 
  601        const double r = lineParts.at( 1 ).toDouble( &rOk );
 
  603        const double g = lineParts.at( 2 ).toDouble( &gOk );
 
  605        const double b = lineParts.at( 3 ).toDouble( &bOk );
 
  608        if ( rOk && gOk && bOk )
 
  610          c = QColor( r, g, b );
 
  613        if ( lineParts.count() >= 5 )
 
  615          const double alpha = lineParts.at( 4 ).toDouble( &ok );
 
  621        if ( lineParts.count() > 5 )
 
  623          label = lineParts.mid( 5 ).join( 
' ' );
 
 
  637  QFile inputFile( path );
 
  639  if ( inputFile.open( QIODevice::ReadOnly ) )
 
  641    QTextStream in( &inputFile );
 
  642    input = in.readAll();
 
 
  653  std::sort( cd.begin(), cd.end(), []( 
const Class & a, 
const Class & b ) -> 
bool 
  655    return a.value < b.value;
 
  658  const auto constCd = cd;
 
  659  for ( 
const Class &
c : constCd )
 
  661    out << QStringLiteral( 
"%1 %2 %3 %4 %5 %6" ).arg( 
c.value ).arg( 
c.color.red() )
 
  662        .arg( 
c.color.green() ).arg( 
c.color.blue() ).arg( 
c.color.alpha() ).arg( 
c.label );
 
  664  return out.join( 
'\n' );
 
 
  674  if ( bandNumber > 0 && bandNumber <= raster->
bandCount() )
 
  676    qlonglong numClasses = 0;
 
  690      std::set<double> values;
 
  698      const int nbBlocksWidth = 
static_cast< int >( std::ceil( 1.0 * raster->
xSize() / maxWidth ) );
 
  699      const int nbBlocksHeight = 
static_cast< int >( std::ceil( 1.0 * raster->
ySize() / maxHeight ) );
 
  700      const int nbBlocks = nbBlocksWidth * nbBlocksHeight;
 
  706      std::unique_ptr< QgsRasterBlock > rasterBlock;
 
  708      bool isNoData = 
false;
 
  709      while ( iter.
readNextRasterPart( bandNumber, iterCols, iterRows, rasterBlock, iterLeft, iterTop, &blockExtent ) )
 
  712          feedback->
setProgress( 100 * ( ( iterTop / maxHeight * nbBlocksWidth ) + iterLeft / maxWidth ) / nbBlocks );
 
  717        for ( 
int row = 0; row < iterRows; row++ )
 
  722          for ( 
int column = 0; column < iterCols; column++ )
 
  727            const double currentValue = rasterBlock->valueAndNoData( row, column, isNoData );
 
  728            if ( numClasses >= MAX_FLOAT_CLASSES )
 
  730              QgsMessageLog::logMessage( QStringLiteral( 
"Number of classes exceeded maximum (%1)." ).arg( MAX_FLOAT_CLASSES ), QStringLiteral( 
"Raster" ) );
 
  733            if ( !isNoData && values.find( currentValue ) == values.end() )
 
  735              values.insert( currentValue );
 
  736              data.push_back( 
Class( currentValue, QColor(), QLocale().toString( currentValue ) ) );
 
  743      std::sort( data.begin(), data.end(), []( 
const Class & a, 
const Class & b ) -> 
bool 
  745        return a.value < b.value;
 
  758      const int bins = std::ceil( max - min ) + 1;
 
  776            data << 
Class( currentValue, QColor(), QLocale().toString( currentValue ) );
 
  779          currentValue += interval;
 
  790    if ( ramp && numClasses > 0 )
 
  798        randomRamp->setTotalColorCount( data.count() );
 
  801      if ( numClasses > 1 )
 
  804      QgsPalettedRasterRenderer::ClassData::iterator cIt = data.begin();
 
  805      for ( ; cIt != data.end(); ++cIt )
 
  810          feedback->
setProgress( std::max<int>( 1, 100 * ( i + 1 ) / numClasses ) );
 
  812        cIt->color = ramp->
color( i / 
static_cast<double>( numClasses ) );
 
 
  823  for ( 
const MultiValueClass &klass : std::as_const( mMultiValueClassData ) )
 
  825    for ( 
const QVariant &entry : std::as_const( klass.values ) )
 
  828      const double value { entry.toDouble( &ok )};
 
  831        data.push_back( { value, klass.color, klass.label } );
 
  835        QgsDebugMsgLevel( QStringLiteral( 
"Could not convert class value '%1' to double when creating classes." ).arg( entry.toString() ), 2 );
 
  842void QgsPalettedRasterRenderer::updateArrays()
 
  846  MultiValueClassData::const_iterator it = mMultiValueClassData.constBegin();
 
  847  for ( ; it != mMultiValueClassData.constEnd(); ++it )
 
  849    for ( 
const QVariant &entry : std::as_const( it->values ) )
 
  852      const double value { entry.toDouble( &ok )};
 
  855        mColors[value] = qPremultiply( it->color.rgba() );
 
  859        QgsDebugMsgLevel( QStringLiteral( 
"Could not convert class value '%1' to double for color lookup." ).arg( entry.toString() ), 2 );
 
QFlags< RasterRendererFlag > RasterRendererFlags
Flags which control behavior of raster renderers.
 
@ InternalLayerOpacityHandling
The renderer internally handles the raster layer's opacity, so the default layer level opacity handli...
 
@ Float32
Thirty two bit floating point (float)
 
@ ARGB32_Premultiplied
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32_Premultiplied.
 
@ Float64
Sixty four bit floating point (double)
 
Abstract base class for color ramps.
 
virtual QColor color(double value) const =0
Returns the color corresponding to a specified value.
 
bool isCanceled() const
Tells whether the operation has been canceled already.
 
void setProgress(double progress)
Sets the current progress for the feedback object.
 
Layer tree node points to a map layer.
 
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
 
Properties of a multi value class: a class that contains multiple values.
 
MultiValueClass(const QVector< QVariant > &values, const QColor &color=QColor(), const QString &label=QString())
Constructor for MultiValueClass from a list of values.
 
Renderer for paletted raster images.
 
QgsRasterBlock * block(int bandNo, const QgsRectangle &extent, int width, int height, QgsRasterBlockFeedback *feedback=nullptr) override
Read block of data using given extent and size.
 
QList< QgsLayerTreeModelLegendNode * > createLegendNodes(QgsLayerTreeLayer *nodeLayer) override
Creates a set of legend nodes representing the renderer.
 
static QgsPalettedRasterRenderer::MultiValueClassData rasterAttributeTableToClassData(const QgsRasterAttributeTable *attributeTable, int classificationColumn=-1, QgsColorRamp *ramp=nullptr)
Reads and returns classes from the Raster Attribute Table attributeTable, optionally classifying the ...
 
QgsColorRamp * sourceColorRamp() const
Gets the source color ramp.
 
static QgsPalettedRasterRenderer::ClassData classDataFromString(const QString &string)
Converts a string containing a color table or class data to to paletted renderer class data.
 
QString label(double idx) const
Returns optional category label.
 
void setSourceColorRamp(QgsColorRamp *ramp)
Set the source color ramp.
 
QList< int > usesBands() const override
Returns a list of band numbers used by the renderer.
 
bool canCreateRasterAttributeTable() const override
Returns true if the renderer is suitable for attribute table creation.
 
void writeXml(QDomDocument &doc, QDomElement &parentElem) const override
Write base class members to xml.
 
Q_DECL_DEPRECATED int band() const
Returns the raster band used for rendering the raster.
 
QList< QgsPalettedRasterRenderer::Class > ClassData
Map of value to class properties.
 
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified symbology visitor, causing it to visit all symbols associated with the renderer...
 
Qgis::RasterRendererFlags flags() const override
Returns flags which dictate renderer behavior.
 
int nColors() const
Returns number of colors.
 
QList< QgsPalettedRasterRenderer::MultiValueClass > MultiValueClassData
Map of multi value to class properties.
 
static QgsPalettedRasterRenderer::ClassData classDataFromFile(const QString &path)
Opens a color table file and returns corresponding paletted renderer class data.
 
bool setInputBand(int band) override
Attempts to set the input band for the renderer.
 
static QgsRasterRenderer * create(const QDomElement &elem, QgsRasterInterface *input)
 
void setMultiValueClasses(const MultiValueClassData &classes)
Sets the multi value classes to setMultiValueClasses.
 
static QgsPalettedRasterRenderer::ClassData colorTableToClassData(const QList< QgsColorRampShader::ColorRampItem > &table)
Converts a raster color table to paletted renderer class data.
 
ClassData classes() const
Returns a map of value to classes (colors) used by the renderer.
 
QList< QPair< QString, QColor > > legendSymbologyItems() const override
Returns symbology items if provided by renderer.
 
QgsPalettedRasterRenderer * clone() const override
Clone itself, create deep copy.
 
void setLabel(double idx, const QString &label)
Set category label.
 
static QgsPalettedRasterRenderer::ClassData classDataFromRaster(QgsRasterInterface *raster, int bandNumber, QgsColorRamp *ramp=nullptr, QgsRasterBlockFeedback *feedback=nullptr)
Generates class data from a raster, for the specified bandNumber.
 
int inputBand() const override
Returns the input band for the renderer, or -1 if no input band is available.
 
static QString classDataToString(const QgsPalettedRasterRenderer::ClassData &classes)
Converts classes to a string representation, using the .clr/gdal color table file format.
 
MultiValueClassData multiValueClasses() const
Returns a map of multi value to classes (colors) used by the renderer.
 
Q_DECL_DEPRECATED void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props=QVariantMap()) const override
Used from subclasses to create SLD Rule elements following SLD v1.0 specs.
 
QgsPalettedRasterRenderer(QgsRasterInterface *input, int bandNumber, const ClassData &classes)
Constructor for QgsPalettedRasterRenderer.
 
A color ramp consisting of random colors, constrained within component ranges.
 
The Field class represents a Raster Attribute Table classification entry for a thematic Raster Attrib...
 
Represents a Raster Attribute Table (RAT).
 
QList< QgsRasterAttributeTable::MinMaxClass > minMaxClasses(const int classificationColumn=-1) const
Returns the classes for a thematic Raster Attribute Table, classified by classificationColumn,...
 
bool isValid(QString *errorMessage=nullptr) const
Returns true if the Raster Attribute Table is valid, optionally reporting validity checks results in ...
 
The RasterBandStats struct is a container for statistics about a single raster band.
 
double minimumValue
The minimum cell value in the raster band.
 
double maximumValue
The maximum cell value in the raster band.
 
Feedback object tailored for raster block reading.
 
A container for a histogram of a single raster band.
 
double minimum
The minimum histogram value.
 
double maximum
The maximum histogram value.
 
QgsRasterHistogram::HistogramVector histogramVector
Stores the histogram for a given layer.
 
bool valid
Histogram is valid.
 
int binCount
Number of bins (intervals,buckets) in histogram.
 
Base class for processing filters like renderers, reprojector, resampler etc.
 
virtual QgsRasterBlock * block(int bandNo, const QgsRectangle &extent, int width, int height, QgsRasterBlockFeedback *feedback=nullptr)=0
Read block of data using given extent and size.
 
virtual Qgis::DataType dataType(int bandNo) const =0
Returns data type for the band specified by number.
 
virtual int xSize() const
Gets raster size.
 
Q_DECL_DEPRECATED QgsRasterBandStats bandStatistics(int bandNo, int stats, const QgsRectangle &extent=QgsRectangle(), int sampleSize=0, QgsRasterBlockFeedback *feedback=nullptr)
Returns the band statistics.
 
QString displayBandName(int bandNumber) const
Generates a friendly, descriptive name for the specified bandNumber.
 
QgsRasterInterface * mInput
 
virtual int ySize() const
 
virtual QgsRectangle extent() const
Gets the extent of the interface.
 
virtual QgsRasterInterface * input() const
Current input.
 
virtual QgsRasterHistogram histogram(int bandNo, int binCount=0, double minimum=std::numeric_limits< double >::quiet_NaN(), double maximum=std::numeric_limits< double >::quiet_NaN(), const QgsRectangle &extent=QgsRectangle(), int sampleSize=0, bool includeOutOfRange=false, QgsRasterBlockFeedback *feedback=nullptr)
Returns a band histogram.
 
Iterator for sequentially processing raster cells.
 
static const int DEFAULT_MAXIMUM_TILE_WIDTH
Default maximum tile width.
 
bool readNextRasterPart(int bandNumber, int &nCols, int &nRows, QgsRasterBlock **block, int &topLeftCol, int &topLeftRow)
Fetches next part of raster data, caller takes ownership of the block and caller should delete the bl...
 
static const int DEFAULT_MAXIMUM_TILE_HEIGHT
Default maximum tile height.
 
void startRasterRead(int bandNumber, qgssize nCols, qgssize nRows, const QgsRectangle &extent, QgsRasterBlockFeedback *feedback=nullptr)
Start reading of raster band.
 
Raster renderer pipe that applies colors to a raster.
 
double mOpacity
Global alpha value (0-1)
 
int mAlphaBand
Read alpha value from band.
 
QRgb renderColorForNodataPixel() const
Returns the color for the renderer to use to represent nodata pixels.
 
std::unique_ptr< QgsRasterTransparency > mRasterTransparency
Raster transparency per color or value. Overwrites global alpha value.
 
void _writeXml(QDomDocument &doc, QDomElement &rasterRendererElem) const
Write upper class info into rasterrenderer element (called by writeXml method of subclasses)
 
int bandCount() const override
Gets number of bands.
 
bool usesTransparency() const
 
virtual Q_DECL_DEPRECATED void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props=QVariantMap()) const
Used from subclasses to create SLD Rule elements following SLD v1.0 specs.
 
void readXml(const QDomElement &rendererElem) override
Sets base class members from xml. Usually called from create() methods of subclasses.
 
Implementation of legend node interface for displaying raster legend entries.
 
A rectangle specified with double values.
 
Implementation of legend node interface for displaying arbitrary labels with icons.
 
Holds SLD export options and other information related to SLD export of a QGIS layer style.
 
void setExtraProperties(const QVariantMap &properties)
Sets the open ended set of properties that can drive/inform the SLD encoding.
 
A color ramp entity for QgsStyle databases.
 
An interface for classes which can visit style entity (e.g.
 
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
 
static std::unique_ptr< QgsColorRamp > loadColorRamp(QDomElement &element)
Creates a color ramp from the settings encoded in an XML element.
 
static QDomElement saveColorRamp(const QString &name, const QgsColorRamp *ramp, QDomDocument &doc)
Encodes a color ramp's settings to an XML element.
 
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
 
unsigned long long qgssize
Qgssize is used instead of size_t, because size_t is stdlib type, unknown by SIP, and it would be har...
 
#define QgsDebugMsgLevel(str, level)
 
#define QgsDebugError(str)
 
Properties of a single value class.
 
Contains information relating to the style entity currently being visited.