@@ -25,6 +25,12 @@ QgsRasterRenderer::QgsRasterRenderer( QgsRasterDataProvider* provider, QgsRaster
25
25
26
26
QgsRasterRenderer::~QgsRasterRenderer ()
27
27
{
28
+ // remove remaining memory in partinfos
29
+ QMap<int , RasterPartInfo>::iterator partIt = mRasterPartInfos .begin ();
30
+ for ( ; partIt != mRasterPartInfos .end (); ++partIt )
31
+ {
32
+ CPLFree ( partIt.value ().data );
33
+ }
28
34
}
29
35
30
36
void QgsRasterRenderer::startRasterRead ( int bandNumber, QgsRasterViewPort* viewPort, const QgsMapToPixel* mapToPixel, double & oversampling )
@@ -35,6 +41,9 @@ void QgsRasterRenderer::startRasterRead( int bandNumber, QgsRasterViewPort* view
35
41
return ;
36
42
}
37
43
44
+ // remove any previous part on that band
45
+ removePartInfo ( bandNumber );
46
+
38
47
// calculate oversampling factor
39
48
if ( mResampler )
40
49
{
@@ -53,7 +62,7 @@ void QgsRasterRenderer::startRasterRead( int bandNumber, QgsRasterViewPort* view
53
62
pInfo.nCols = viewPort->drawableAreaXDim * oversampling;
54
63
pInfo.nRows = viewPort->drawableAreaYDim * oversampling;
55
64
int totalMemoryUsage = pInfo.nCols * pInfo.nRows * mProvider ->dataTypeSize ( bandNumber );
56
- int parts = totalMemoryUsage / 100000000 /* 10000 */ + 1 ;
65
+ int parts = totalMemoryUsage / /* 100000000 */ 100000 + 1 ;
57
66
pInfo.nPartsPerDimension = sqrt ( parts );
58
67
pInfo.nColsPerPart = pInfo.nCols / pInfo.nPartsPerDimension ;
59
68
pInfo.nRowsPerPart = pInfo.nRows / pInfo.nPartsPerDimension ;
@@ -124,4 +133,16 @@ bool QgsRasterRenderer::readNextRasterPart( int bandNumber, QgsRasterViewPort* v
124
133
125
134
void QgsRasterRenderer::stopRasterRead ( int bandNumber )
126
135
{
136
+ removePartInfo ( bandNumber );
137
+ }
138
+
139
+ void QgsRasterRenderer::removePartInfo ( int bandNumber )
140
+ {
141
+ QMap<int , RasterPartInfo>::iterator partIt = mRasterPartInfos .find ( bandNumber );
142
+ if ( partIt != mRasterPartInfos .end () )
143
+ {
144
+ RasterPartInfo& pInfo = partIt.value ();
145
+ CPLFree ( pInfo.data );
146
+ mRasterPartInfos .remove ( bandNumber );
147
+ }
127
148
}
0 commit comments