Alexander,

    Not sure if it meets you situation, but there is a command line utility 
with similar functionality, gdallocationinfo, 
http://gdal.org/gdallocationinfo.html 

HTH, Eli


>>> On 3/16/2011 at 1:21 PM, in message
<20110316222128.b943f4e3.alexander.b...@gmail.com>, Alexander Bruy
<alexander.b...@gmail.com> wrote:
> Hi all
> 
> I work on raster processing application (developed with C++ and Qt).
> For reading rasters we use GDAL and it's C++ API.
> 
> For one task we need to get pixel values from all raster bands. For
> this I get all GDALRasterBands and store them in list. Then in loop
> read image row by row and store row from each band in another list.
> 
> Here is simplified code
> 
> // iterate over image row by row
> for ( int row = 0; row < ySize; ++row )
> {
>   // read one row from each band and store it in list
>   for ( int b = 0; b < bandCount; ++b )
>   {
>     float *scanline;
>     scanline = (float *) CPLMalloc( sizeof( float ) * xSize );
>     bands[ i ]->RasterIO( GF_Read, 0, row, xSize, 1, scanline, xSize,
>                           1, GDT_Float32, 0, 0 );
>     rows[ i ] = scanline;
>   }
> 
>   // iterate on pixels in row
>   for (int col = 0; col < ySize; ++col)
>   {
>     // get pixel value from bands
>     float pixel[bandCount];
>     for ( int r = 0; r < bandCount; ++r )
>     {
>        // get value in (row, col) from band r
>        double pixel[r] = rows[ r ][ col ];
>     }
>     // do something with this pixel
>   }
> }
> 
> Is this correct approach? Or maybe there is another more correct way
> to do this?
> 
> Also I'm not sure where I should free memory allocated with CPLMalloc().
> After reading pixels and before reading next rows or at end when
> all rows processed?
> 
> I'm not a big C++ programmer, so any help is very appreciated
> 
> Thanks

_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to