37 if ( !p || !mIterator || !viewPort || !qgsMapToPixel )
59 &block, topLeftCol, topLeftRow ) )
67 QImage img = block->
image();
72 QPrinter *printer =
dynamic_cast<QPrinter *
>( p->device() );
73 if ( printer && printer->outputFormat() == QPrinter::PdfFormat )
77 img = img.convertToFormat( QImage::Format_ARGB32 );
78 QRgb transparentBlack = qRgba( 0, 0, 0, 0 );
79 QRgb transparentWhite = qRgba( 255, 255, 255, 0 );
80 for (
int x = 0; x < img.width(); x++ )
82 for (
int y = 0; y < img.height(); y++ )
84 if ( img.pixel( x, y ) == transparentBlack )
86 img.setPixel( x, y, transparentWhite );
98 p->setCompositionMode( QPainter::CompositionMode_Source );
101 drawImage( p, viewPort, img, topLeftCol, topLeftRow, qgsMapToPixel );
108 p->setCompositionMode( QPainter::CompositionMode_SourceOver );
120 if ( !p || !viewPort )
128 p->setRenderHint( QPainter::Antialiasing,
false );
133 p->setBrush( QBrush( QColor( Qt::white ), Qt::NoBrush ) );
146 p->translate( cx, cy );
147 p->rotate( rotation );
148 p->translate( -cx, -cy );
152 p->drawImage( tlPoint, img );
156 QRectF br = QRectF( tlPoint, img.size() );
157 QPointF c = br.center();
158 double rad = std::max( br.width(), br.height() ) / 10;
159 p->drawRoundedRect( br, rad, rad );
160 p->drawLine( QLineF( br.x(), br.y(), br.x() + br.width(), br.y() + br.height() ) );
161 p->drawLine( QLineF( br.x() + br.width(), br.y(), br.x(), br.y() + br.height() ) );
163 double nw = br.width() * 0.5;
164 double nh = br.height() * 0.5;
165 br = QRectF( c - QPointF( nw / 2, nh / 2 ), QSize( nw, nh ) );
166 p->drawRoundedRect( br, rad, rad );
168 nw = br.width() * 0.5;
169 nh = br.height() * 0.5;
170 br = QRectF( c - QPointF( nw / 2, nh / 2 ), QSize( nw, nh ) );
171 p->drawRoundedRect( br, rad, rad );
void drawImage(QPainter *p, QgsRasterViewPort *viewPort, const QImage &img, int topLeftCol, int topLeftRow, const QgsMapToPixel *mapToPixel=nullptr) const
Draws raster part.
bool renderPartialOutput() const
Whether our painter is drawing to a temporary image used just by this layer.
Iterator for sequentially processing raster cells.
int mWidth
Width, number of columns to be rendered.
double mapRotation() const
Return current map rotation in degrees.
Perform transforms between map coordinates and device coordinates.
int mapWidth() const
Return current map width in pixels The information is only known if setRotation was used...
int mapHeight() const
Return current map height in pixels.
#define QgsDebugMsgLevel(str, level)
QgsRasterDrawer(QgsRasterIterator *iterator)
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...
QImage image() const
Get image if type is color.
bool isCanceled() const
Tells whether the operation has been canceled already.
int mHeight
Distance in map units from bottom edge to top edge for the part of the raster that is to be rendered...
This class provides details of the viewable area that a raster will be rendered into.
Feedback object tailored for raster block reading.
void draw(QPainter *p, QgsRasterViewPort *viewPort, const QgsMapToPixel *qgsMapToPixel, QgsRasterBlockFeedback *feedback=nullptr)
Draws raster data.
void startRasterRead(int bandNumber, int nCols, int nRows, const QgsRectangle &extent, QgsRasterBlockFeedback *feedback=nullptr)
Start reading of raster band.
QgsRectangle mDrawnExtent
Intersection of current map extent and layer extent.
QgsPointXY mTopLeftPoint
Coordinate (in output device coordinate system) of top left corner of the part of the raster that is ...