Re: [gdal-dev] Writing pixel values
Ivan Lucena
ivan.lucena at pmldnet.com
Wed Sep 15 15:38:41 EDT 2010
Akhil,
If you loo at that section of the API Tutorial:
"Using CreateCopy()
The GDALDriver::CreateCopy() method can be used fairly simply..."
You will see that what you need to do is to call GDALOpen() with GA_ReadOnly passing the input file; then you would need to get a driver, with GDALGetDriverByName(); then call GDALCreateCopy() passing the driver and the output file name.
That returns the output dataset pointer read for writing. You don't need to call GDALOpen with GA_Update in that case.
You should call GDALGetRasterBand() from the input dataset and from the output dataset.
You can find example of that on the last "In C: " source code box on the GDAL API tutorial.
Please pay attention to what Frank said about the number of pixels that you are trying to write. He is the boss. :)
By the way, I am planning to visit RIT this fall with my son. What Al Pacino and Graig Ferguson are going to be doing together over there? :) (rit.edu).
Regards,
Ivan
> -------Original Message-------
> From: Akhil Jaggarwal <axj4159 at cs.rit.edu>
> To: gdal-dev at lists.osgeo.org
> Subject: Re: [gdal-dev] Writing pixel values
> Sent: Sep 15 '10 14:14
>
> Thanks, I understand what I was doing wrong and have appropriately
> made some changes.
>
> I created a new band to write using:
>
> GDALRasterBandH hDestBand;
>
> and open the dataset for writing:
>
> hDestDS = GDALOpen( pszDestFileName, GA_Update );
>
>
> Then I pass metadata:
> hDestDS = GDALCreateCopy( hDriver, pszDestFileName, hDataset, FALSE,
> NULL, NULL, NULL );
>
> And read all the dataset into pafscanfile buffer: (before starting the for loop)
> GDALRasterIO(hBand, GF_Read, 0, 0, nxSize, nySize,
> pafScanline,
> nxSize,nySize,
> GDT_Int16,
> 0, 0);
>
> However, when it comes to the part of writing the dataset, using:
> for(i = 0; i < nySize; i++) {
> for(j = 0; j < nxSize; j++) {
> if( CE_Failure == GDALRasterIO( hDestBand,
> GF_Write, j, i, 1, 1,
> change1, 1, 1 , GDT_Int16, 0,0) ) {
> printf("Write Error!");
> return 1;
> }
>
> I get the error:
>
> ERROR 5: Access window out of range in RasterIO(). Requested
> (1,1) of size 1x1 on raster of 0x0.
> Write Error
>
> What am I missing here? It seems I 've to specify the the raster band
> size of the ouput band. How can I do that?
>
> Thanks once again.
>
> On Wed, Sep 15, 2010 at 11:58 AM, Ivan Lucena <ivan.lucena at pmldnet.com> wrote:
> > Akhil,
> >
> > How did you create or opened the output? Did you also create the bands before calling GDALRasterIO?
> >
> > See examples on: http://gdal.org/gdal_tutorial.html
> >
> > Regards,
> >
> > Ivan
> >
> >
> >> -------Original Message-------
> >> From: Akhil Jaggarwal <axj4159 at cs.rit.edu>
> >> To: gdal-dev at lists.osgeo.org
> >> Subject: [gdal-dev] Writing pixel values
> >> Sent: Sep 15 '10 10:52
> >>
> >> Hi,
> >>
> >> Any comments/suggestions on this issue would be immensely helpful!
> >>
> >> I'm storing the pixel values in a buffer like this:
> >>
> >> pafScanline = (short int*)CPLMalloc(sizeof(short int)*nxSize*nySize);
> >>
> >> I can read the data alright. The call to GDALRasterIO is being made
> >> correctly, which I do with:
> >>
> >> GDALRasterIO(hBand, GF_Read, 0, 0, nxSize, nySize,
> >> pafScanline,
> >> nxSize,nySize,
> >> GDT_Int16,
> >> 0, 0);
> >> However, when it comes to the part of writing a pixel data to an
> >> output file, the call to GDALRasterIO fails:
> >>
> >> for(i = 0; i < nySize; i++) {
> >> for(j = 0; j < nxSize; j++) {
> >>
> >> if( CE_Failure == GDALRasterIO( hDestDS,
> >> GF_Write, 0, 0, j, i,
> >> change1, j, i , GDT_Int16, 0,0) ) {
> >> printf("Write Error!");
> >> return 1;
> >> }
> >> }
> >> }
> >>
> >> Where change1 is a variable to hold pixel data that I want to change.
> >> It's declared in the following manner:
> >>
> >> short int*change1;
> >> change1 = malloc(sizeof(short int));
> >> *change1 = 1;
> >>
> >> I can't get what exactly am I missing. The file i'm using is a tiled,
> >> 16 bit signed TIFF.
> >>
> >> How do I change the value at a pixel location?
> >>
> >> Thanks!
> >> _______________________________________________
> >> gdal-dev mailing list
> >> gdal-dev at lists.osgeo.org
> >> http://lists.osgeo.org/mailman/listinfo/gdal-dev
> >>
> >
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>
More information about the gdal-dev
mailing list