@@ -25,26 +25,33 @@ QgsRasterFileWriter::~QgsRasterFileWriter()
2525
2626}
2727
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 )
2929{
30- return NoError;
31- #if 0
32- if ( !sourceProvider || ! sourceProvider->isValid() )
30+ if ( !iter )
3331 {
3432 return SourceProviderError;
3533 }
3634
35+ const QgsRasterInterface* iface = iter->input ();
36+ if ( !iface )
37+ {
38+ return SourceProviderError;
39+ }
40+
41+ #if 0
3742 if ( outputExtent.isEmpty() )
3843 {
3944 outputExtent = sourceProvider->extent();
4045 }
46+ #endif // 0
4147
4248 mProgressDialog = p;
4349
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 )
4653 {
47- WriterError e = writeARGBRaster( sourceProvider , nCols, outputExtent );
54+ WriterError e = writeARGBRaster ( iter , nCols, outputExtent );
4855 mProgressDialog = 0 ;
4956 return e;
5057 }
@@ -54,10 +61,9 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster( QgsRasterData
5461 mProgressDialog = 0 ;
5562 return NoError;
5663 }
57- #endif // 0
5864}
5965
60- QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRasterSingleTile ( QgsRasterDataProvider* sourceProvider , int nCols )
66+ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRasterSingleTile ( QgsRasterIterator* iter , int nCols )
6167{
6268#if 0
6369 if ( !sourceProvider || ! sourceProvider->isValid() )
@@ -156,22 +162,20 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRasterSingleTile( Qgs
156162 return NoError;
157163}
158164
159- QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster ( QgsRasterDataProvider* sourceProvider , int nCols, const QgsRectangle& outputExtent )
165+ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster ( QgsRasterIterator* iter , int nCols, const QgsRectangle& outputExtent )
160166{
161167#if 0
162- if ( !sourceProvider || ! sourceProvider->isValid() )
168+ if ( !iter )
163169 {
164170 return SourceProviderError;
165171 }
166172
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 )
170175 {
171176 return SourceProviderError;
172177 }
173178
174-
175179 //create directory for output files
176180 QDir destDir( mOutputUrl );
177181 if ( mTiledMode )
@@ -185,7 +189,8 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
185189 QgsRasterIterator iter( 1, sourceProvider );
186190 iter.setMaximumTileWidth( mMaxTileWidth );
187191 iter.setMaximumTileHeight( mMaxTileHeight );
188- void* data = VSIMalloc( sourceProvider->dataTypeSize( 1 ) * mMaxTileWidth * mMaxTileHeight );
192+
193+ void* data = VSIMalloc( iface->typeSize( QgsRasterInterface::ARGB32 ) * mMaxTileWidth * mMaxTileHeight );
189194 void* redData = VSIMalloc( mMaxTileWidth * mMaxTileHeight );
190195 void* greenData = VSIMalloc( mMaxTileWidth * mMaxTileHeight );
191196 void* blueData = VSIMalloc( mMaxTileWidth * mMaxTileHeight );
@@ -208,9 +213,13 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
208213 geoTransform[4] = 0.0;
209214 geoTransform[5] = -pixelSize;
210215
216+ //where to get CRS from?
217+ QgsCoordinateReferenceSystem fakeCRS;
218+ fakeCRS.createFromEpsg( 21781 );
219+
211220 if ( mTiledMode )
212221 {
213- createVRT( nCols, nRows, sourceProvider->crs() , geoTransform );
222+ createVRT( nCols, nRows, fakeCRS , geoTransform );
214223 }
215224 else
216225 {
@@ -221,14 +230,21 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
221230 }
222231
223232 if ( !destProvider->create( mOutputFormat, 4, QgsRasterInterface::Byte, nCols, nRows, geoTransform,
224- sourceProvider->crs() ) )
233+ fakeCRS ) )
225234 {
226235 delete destProvider;
227236 return CreateDatasourceError;
228237 }
229238 }
230239
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 );
232248
233249 //initialize progress dialog
234250 int nTiles = iter.nTilesX() * iter.nTilesY();
@@ -239,7 +255,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
239255 mProgressDialog->show();
240256 }
241257
242- while ( iter. nextPart( data, mapRect, iterLeft, iterTop, iterCols, iterRows, progress ) )
258+ while ( iter-> nextPart( data, mapRect, iterLeft, iterTop, iterCols, iterRows, progress ) )
243259 {
244260 if ( iterCols <= 5 || iterRows <= 5 ) //some wms servers don't like small values
245261 {
@@ -299,7 +315,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
299315 geoTransform[4] = 0.0;
300316 geoTransform[5] = -outputMapUnitsPerPixel;
301317 if ( !destProvider->create( mOutputFormat, 4, QgsRasterInterface::Byte, iterCols, iterRows, geoTransform,
302- sourceProvider->crs() ) )
318+ fakeCRS ) )
303319 {
304320 delete destProvider;
305321 return CreateDatasourceError;
0 commit comments