@@ -25,26 +25,33 @@ QgsRasterFileWriter::~QgsRasterFileWriter()
25
25
26
26
}
27
27
28
- QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster ( QgsRasterDataProvider* sourceProvider , int nCols, QgsRectangle outputExtent, QProgressDialog* p )
28
+ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster ( QgsRasterIterator* iter , int nCols, QgsRectangle outputExtent, QProgressDialog* p )
29
29
{
30
- return NoError;
31
- #if 0
32
- if ( !sourceProvider || ! sourceProvider->isValid() )
30
+ if ( !iter )
33
31
{
34
32
return SourceProviderError;
35
33
}
36
34
35
+ const QgsRasterInterface* iface = iter->input ();
36
+ if ( !iface )
37
+ {
38
+ return SourceProviderError;
39
+ }
40
+
41
+ #if 0
37
42
if ( outputExtent.isEmpty() )
38
43
{
39
44
outputExtent = sourceProvider->extent();
40
45
}
46
+ #endif // 0
41
47
42
48
mProgressDialog = p;
43
49
44
- QgsRasterInterface::DataType inputDataType = ( QgsRasterInterface::DataType )sourceProvider->dataType( 1 );
45
- if ( inputDataType == QgsRasterInterface::::ARGBDataType && sourceProvider->bandCount() == 1 )
50
+ QgsRasterInterface::DataType debug = iface->dataType ( 1 );
51
+
52
+ if ( iface->dataType ( 1 ) == QgsRasterInterface::ARGB32 )
46
53
{
47
- WriterError e = writeARGBRaster( sourceProvider , nCols, outputExtent );
54
+ WriterError e = writeARGBRaster ( iter , nCols, outputExtent );
48
55
mProgressDialog = 0 ;
49
56
return e;
50
57
}
@@ -54,10 +61,9 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster( QgsRasterData
54
61
mProgressDialog = 0 ;
55
62
return NoError;
56
63
}
57
- #endif // 0
58
64
}
59
65
60
- QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRasterSingleTile ( QgsRasterDataProvider* sourceProvider , int nCols )
66
+ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRasterSingleTile ( QgsRasterIterator* iter , int nCols )
61
67
{
62
68
#if 0
63
69
if ( !sourceProvider || ! sourceProvider->isValid() )
@@ -156,22 +162,20 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRasterSingleTile( Qgs
156
162
return NoError;
157
163
}
158
164
159
- QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster ( QgsRasterDataProvider* sourceProvider , int nCols, const QgsRectangle& outputExtent )
165
+ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster ( QgsRasterIterator* iter , int nCols, const QgsRectangle& outputExtent )
160
166
{
161
167
#if 0
162
- if ( !sourceProvider || ! sourceProvider->isValid() )
168
+ if ( !iter )
163
169
{
164
170
return SourceProviderError;
165
171
}
166
172
167
- QgsRasterInterface::DataType sourceDataType = ( QgsRasterInterface::DataType )sourceProvider->dataType( 1 );
168
- int nInputBands = sourceProvider->bandCount();
169
- if ( sourceDataType != QgsRasterInterface::ARGBDataType || nInputBands != 1 )
173
+ const QgsRasterInterface* iface = iter->input();
174
+ if ( !iface || iface->dataType( 1 ) != QgsRasterInterface::ARGB32 )
170
175
{
171
176
return SourceProviderError;
172
177
}
173
178
174
-
175
179
//create directory for output files
176
180
QDir destDir( mOutputUrl );
177
181
if ( mTiledMode )
@@ -185,7 +189,8 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
185
189
QgsRasterIterator iter( 1, sourceProvider );
186
190
iter.setMaximumTileWidth( mMaxTileWidth );
187
191
iter.setMaximumTileHeight( mMaxTileHeight );
188
- void* data = VSIMalloc( sourceProvider->dataTypeSize( 1 ) * mMaxTileWidth * mMaxTileHeight );
192
+
193
+ void* data = VSIMalloc( iface->typeSize( QgsRasterInterface::ARGB32 ) * mMaxTileWidth * mMaxTileHeight );
189
194
void* redData = VSIMalloc( mMaxTileWidth * mMaxTileHeight );
190
195
void* greenData = VSIMalloc( mMaxTileWidth * mMaxTileHeight );
191
196
void* blueData = VSIMalloc( mMaxTileWidth * mMaxTileHeight );
@@ -208,9 +213,13 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
208
213
geoTransform[4] = 0.0;
209
214
geoTransform[5] = -pixelSize;
210
215
216
+ //where to get CRS from?
217
+ QgsCoordinateReferenceSystem fakeCRS;
218
+ fakeCRS.createFromEpsg( 21781 );
219
+
211
220
if ( mTiledMode )
212
221
{
213
- createVRT( nCols, nRows, sourceProvider->crs() , geoTransform );
222
+ createVRT( nCols, nRows, fakeCRS , geoTransform );
214
223
}
215
224
else
216
225
{
@@ -221,14 +230,21 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
221
230
}
222
231
223
232
if ( !destProvider->create( mOutputFormat, 4, QgsRasterInterface::Byte, nCols, nRows, geoTransform,
224
- sourceProvider->crs() ) )
233
+ fakeCRS ) )
225
234
{
226
235
delete destProvider;
227
236
return CreateDatasourceError;
228
237
}
229
238
}
230
239
231
- iter.select( outputExtent, outputMapUnitsPerPixel );
240
+ QgsRasterViewPort viewPort;
241
+ viewPort.drawableAreaXDim = nCols;
242
+ viewPort.drawableAreaYDim = nRows;
243
+
244
+ QgsMapUnitsPerPixel mup;
245
+
246
+ //iter->select( outputExtent, outputMapUnitsPerPixel );
247
+ iter->startRasterRead( 1, &viewPort, &mup );
232
248
233
249
//initialize progress dialog
234
250
int nTiles = iter.nTilesX() * iter.nTilesY();
@@ -239,7 +255,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
239
255
mProgressDialog->show();
240
256
}
241
257
242
- while ( iter. nextPart( data, mapRect, iterLeft, iterTop, iterCols, iterRows, progress ) )
258
+ while ( iter-> nextPart( data, mapRect, iterLeft, iterTop, iterCols, iterRows, progress ) )
243
259
{
244
260
if ( iterCols <= 5 || iterRows <= 5 ) //some wms servers don't like small values
245
261
{
@@ -299,7 +315,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
299
315
geoTransform[4] = 0.0;
300
316
geoTransform[5] = -outputMapUnitsPerPixel;
301
317
if ( !destProvider->create( mOutputFormat, 4, QgsRasterInterface::Byte, iterCols, iterRows, geoTransform,
302
- sourceProvider->crs() ) )
318
+ fakeCRS ) )
303
319
{
304
320
delete destProvider;
305
321
return CreateDatasourceError;
0 commit comments