Skip to content

Commit cc9bc52

Browse files
committedJan 1, 2012
Consider alpha settings in single band gray renderer
1 parent 83f3d75 commit cc9bc52

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed
 

‎src/core/raster/qgssinglebandgrayrenderer.cpp

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "qgssinglebandgrayrenderer.h"
1919
#include "qgscontrastenhancement.h"
20+
#include "qgsrastertransparency.h"
2021
#include <QImage>
2122

2223
QgsSingleBandGrayRenderer::QgsSingleBandGrayRenderer( QgsRasterDataProvider* provider, int grayBand, QgsRasterResampler* resampler ):
@@ -37,20 +38,40 @@ void QgsSingleBandGrayRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort,
3738

3839
double oversamplingX, oversamplingY;
3940
startRasterRead( mGrayBand, viewPort, theQgsMapToPixel, oversamplingX, oversamplingY );
41+
if ( mAlphaBand > 0 && mGrayBand != mAlphaBand )
42+
{
43+
startRasterRead( mAlphaBand, viewPort, theQgsMapToPixel, oversamplingX, oversamplingY );
44+
}
4045

4146
int nCols = 0;
4247
int nRows = 0;
4348
int topLeftCol = 0;
4449
int topLeftRow = 0;
4550
QgsRasterDataProvider::DataType rasterType = ( QgsRasterDataProvider::DataType )mProvider->dataType( mGrayBand );
51+
QgsRasterDataProvider::DataType alphaType = QgsRasterDataProvider::UnknownDataType;
52+
if ( mAlphaBand > 0 )
53+
{
54+
alphaType = ( QgsRasterDataProvider::DataType )mProvider->dataType( mAlphaBand );
55+
}
4656
void* rasterData;
47-
//double currentOpacity = mOpacity;
57+
void* alphaData;
58+
double currentAlpha = mOpacity;
4859
int grayVal;
4960
QRgb myDefaultColor = qRgba( 0, 0, 0, 0 );
5061

5162

5263
while ( readNextRasterPart( mGrayBand, viewPort, nCols, nRows, &rasterData, topLeftCol, topLeftRow ) )
5364
{
65+
if ( mAlphaBand > 0 && mGrayBand != mAlphaBand )
66+
{
67+
readNextRasterPart( mAlphaBand, viewPort, nCols, nRows, &alphaData, topLeftCol, topLeftRow );
68+
}
69+
else if ( mAlphaBand > 0 )
70+
{
71+
alphaData = rasterData;
72+
}
73+
74+
5475
//create image
5576
QImage img( nCols, nRows, QImage::Format_ARGB32_Premultiplied );
5677
QRgb* imageScanLine = 0;
@@ -79,7 +100,25 @@ void QgsSingleBandGrayRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort,
79100
grayVal = 255 - grayVal;
80101
}
81102

82-
imageScanLine[j] = qRgba( grayVal, grayVal, grayVal, 255 );
103+
//alpha
104+
currentAlpha = mOpacity;
105+
if ( mRasterTransparency )
106+
{
107+
currentAlpha = mRasterTransparency->alphaValue( grayVal, mOpacity * 255 ) / 255.0;
108+
}
109+
if ( mAlphaBand > 0 )
110+
{
111+
currentAlpha *= ( readValue( alphaData, alphaType, currentRasterPos ) / 255.0 );
112+
}
113+
114+
if ( doubleNear( currentAlpha, 255 ) )
115+
{
116+
imageScanLine[j] = qRgba( grayVal, grayVal, grayVal, 255 );
117+
}
118+
else
119+
{
120+
imageScanLine[j] = qRgba( currentAlpha * grayVal, currentAlpha * grayVal, currentAlpha * grayVal, currentAlpha * 255 );
121+
}
83122
++currentRasterPos;
84123
}
85124
}
@@ -88,4 +127,9 @@ void QgsSingleBandGrayRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort,
88127
}
89128

90129
stopRasterRead( mGrayBand );
130+
if ( mAlphaBand > 0 && mGrayBand != mAlphaBand )
131+
{
132+
stopRasterRead( mAlphaBand );
133+
}
134+
91135
}

0 commit comments

Comments
 (0)
Please sign in to comment.