diff --git a/src/core/composer/qgscomposition.cpp b/src/core/composer/qgscomposition.cpp index 729714a1f2b9..59a1db92dde8 100644 --- a/src/core/composer/qgscomposition.cpp +++ b/src/core/composer/qgscomposition.cpp @@ -2014,6 +2014,7 @@ QImage QgsComposition::printPageAsRaster( int page ) image.fill( 0 ); QPainter imagePainter( &image ); renderPage( &imagePainter, page ); + if ( !imagePainter.isActive() ) return QImage(); } return image; } diff --git a/src/core/qgsmaprenderer.cpp b/src/core/qgsmaprenderer.cpp index ddd944d5d08f..bec11de36c4d 100644 --- a/src/core/qgsmaprenderer.cpp +++ b/src/core/qgsmaprenderer.cpp @@ -463,6 +463,13 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale ) QgsDebugMsg( "Caching enabled but layer redraw forced by extent change or empty cache" ); QImage * mypImage = new QImage( mRenderContext.painter()->device()->width(), mRenderContext.painter()->device()->height(), QImage::Format_ARGB32 ); + if ( mypImage->isNull() ) + { + QgsDebugMsg( "insufficient memory for image " + QString::number(mRenderContext.painter()->device()->width()) + "x" + QString::number(mRenderContext.painter()->device()->height()) ); + emit drawError( ml ); + painter->end(); // drawError is not caught by anyone, so we end painting to notify caller + return; + } mypImage->fill( 0 ); ml->setCacheImage( mypImage ); //no need to delete the old one, maplayer does it for you QPainter * mypPainter = new QPainter( ml->cacheImage() ); @@ -501,6 +508,13 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale ) flattenedLayer = true; mypFlattenedImage = new QImage( mRenderContext.painter()->device()->width(), mRenderContext.painter()->device()->height(), QImage::Format_ARGB32 ); + if ( mypFlattenedImage->isNull() ) + { + QgsDebugMsg( "insufficient memory for image " + QString::number(mRenderContext.painter()->device()->width()) + "x" + QString::number(mRenderContext.painter()->device()->height()) ); + emit drawError( ml ); + painter->end(); // drawError is not caught by anyone, so we end painting to notify caller + return; + } mypFlattenedImage->fill( 0 ); QPainter * mypPainter = new QPainter( mypFlattenedImage ); if ( mySettings.value( "/qgis/enable_anti_aliasing", true ).toBool() )