From 47222749f6c0fddd66fe50948ebacba775af017d Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 20 Oct 2016 18:16:34 +1000 Subject: [PATCH] Fix calculation of transparent region --- src/core/effects/qgsimageoperation.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/core/effects/qgsimageoperation.cpp b/src/core/effects/qgsimageoperation.cpp index 3f74133d26f..c17bf0f723e 100644 --- a/src/core/effects/qgsimageoperation.cpp +++ b/src/core/effects/qgsimageoperation.cpp @@ -809,21 +809,28 @@ QRect QgsImageOperation::nonTransparentImageRect( const QImage &image, QSize min // scan down till we hit something for ( int y = 0; y < height; ++y ) { + bool found = false; const QRgb* imgScanline = reinterpret_cast< const QRgb* >( image.constScanLine( y ) ); for ( int x = 0; x < width; ++x ) { if ( qAlpha( imgScanline[x] ) ) { ymin = y; + ymax = y; xmin = x; xmax = x; + found = true; + break; } } + if ( found ) + break; } //scan up till we hit something - for ( int y = height - 1; y > ymin; --y ) + for ( int y = height - 1; y >= ymin; --y ) { + bool found = false; const QRgb* imgScanline = reinterpret_cast< const QRgb* >( image.constScanLine( y ) ); for ( int x = 0; x < width; ++x ) { @@ -832,8 +839,12 @@ QRect QgsImageOperation::nonTransparentImageRect( const QImage &image, QSize min ymax = y; xmin = qMin( xmin, x ); xmax = qMax( xmax, x ); + found = true; + break; } } + if ( found ) + break; } //scan left to right till we hit something, using a refined y region