[QGIS Commit] r15473 - trunk/qgis/src/core/raster
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Mon Mar 14 08:48:50 EDT 2011
Author: jef
Date: 2011-03-14 05:48:50 -0700 (Mon, 14 Mar 2011)
New Revision: 15473
Modified:
trunk/qgis/src/core/raster/qgsrasterlayer.cpp
Log:
fix/reintroduce wms layer transparency
Modified: trunk/qgis/src/core/raster/qgsrasterlayer.cpp
===================================================================
--- trunk/qgis/src/core/raster/qgsrasterlayer.cpp 2011-03-14 12:45:56 UTC (rev 15472)
+++ trunk/qgis/src/core/raster/qgsrasterlayer.cpp 2011-03-14 12:48:50 UTC (rev 15473)
@@ -3622,12 +3622,43 @@
QRgb* imageScanLine = 0;
void* rasterScanLine = 0;
+ QRgb myDefaultColor = qRgba( 255, 255, 255, 0 );
+
while ( imageBuffer.nextScanLine( &imageScanLine, &rasterScanLine ) )
{
- int size = theRasterViewPort->drawableAreaXDim * 4;
- memcpy( imageScanLine, rasterScanLine, size );
+ if ( mTransparencyLevel == 0 )
+ {
+ int size = theRasterViewPort->drawableAreaXDim * 4;
+ memcpy( imageScanLine, rasterScanLine, size );
+ }
+ else
+ {
+ uint *p = ( uint* ) rasterScanLine;
+ for ( int i = 0; i < theRasterViewPort->drawableAreaXDim; ++i )
+ {
+ uint v = *p++;
+ int myRedValue = ( v & 0xff0000 ) >> 16;
+ int myGreenValue = ( v & 0xff00 ) >> 8;
+ int myBlueValue = ( v & 0xff );
+
+ int myAlphaValue = mRasterTransparency.alphaValue( myRedValue, myGreenValue, myBlueValue, mTransparencyLevel );
+ if ( 0 == myAlphaValue )
+ {
+ imageScanLine[ i ] = myDefaultColor;
+ continue;
+ }
+
+ if ( mInvertColor )
+ {
+ myRedValue = 255 - myRedValue;
+ myGreenValue = 255 - myGreenValue;
+ myBlueValue = 255 - myBlueValue;
+ }
+
+ imageScanLine[ i ] = qRgba( myRedValue, myGreenValue, myBlueValue, myAlphaValue );
+ }
+ }
}
-
}
void QgsRasterLayer::drawMultiBandColor( QPainter * theQPainter, QgsRasterViewPort * theRasterViewPort,
More information about the QGIS-commit
mailing list