[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