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! On Mon, Sep 13, 2010 at 11:54 PM, Akhil Jaggarwal <axj4...@cs.rit.edu> wrote: > Hi, > > Thank you for the reply. > > Calls to GDALRasterIO() are OK. Which I assume in a line interleaved > format look like this: > > GDALRasterIO(hBand, GF_Read, 0,0, i, j, pafScanline, > nBlockXSize, nBlockYSize, > GDT_Int16, > 0, 0); > > Is that correct? > > Also, the statement: if(pafScanline[j] == pixel_value), is that a > correct way to check if a pixel value at the jth col is equal to some > constant? > > pafScanline is declared as follows: short int * pafScanline. In the > API, pdata is a void *. > > Is this way to substitute the value of a pixel (of short int type) > according to a rule, and then writing the pixel back to the TIFF a > correct way? - > > short int rule1 = 1; > void *change = malloc(sizeof(short int)); > change1 = &rule1; > ... > ... > ... > GDALRasterIO( hDestDS, GF_Write, 0,0, i,j, change1, > nBlockXSize,nBlockYSize , GDT_Int16, 0,0); > > Thanks. > > On Mon, Sep 13, 2010 at 4:40 PM, Chaitanya kumar CH > <chaitanya...@gmail.com> wrote: >> Akhil, >> >> Check which of the GDALRasterIO() calls are made. >> >> Also, I noticed that you are calling GDALRasterIO() to read the data pixel >> by pixel. Line by line will be faster, especially if the data is line >> interleaved. >> >> On Mon, Sep 13, 2010 at 8:30 PM, Akhil Jaggarwal <axj4...@cs.rit.edu> wrote: >>> >>> Hi, >>> >>> I've shortened my questions to exactly this part of the code: >>> >>> // read datasets, compare data and write >>> if ( (pafScanline2[j] > 6 || pafScanline3[j] > 950) >>> && >>> pafScanline[j] == 2) { >>> GDALRasterIO( hDestDS, GF_Write, 0,0, i,j, >>> change1, i, j, GDT_Byte, >>> 0,0); >>> } >>> else if( (pafScanline4[j] < -700) && >>> pafScanline[j] == 6 ) { >>> GDALRasterIO( hDestDS, GF_Write, 0,0, i,j, >>> change2, i, j, GDT_Byte, >>> 0,0); >>> } >>> else if( (pafScanline2[j] > 6) && pafScanline[j] == >>> 3 ) { >>> GDALRasterIO( hDestDS, GF_Write, 0,0, i,j, >>> change2, i, j, GDT_Byte, >>> 0,0); >>> } >>> else if((pafScanline3[j]>1500) && pafScanline[j] == >>> 6) { >>> GDALRasterIO( hDestDS, GF_Write, 0,0, i,j, >>> change1, i, j, GDT_Byte, >>> 0,0); >>> } >>> else >>> GDALRasterIO( hDestDS, GF_Write, 0,0, i,j, >>> &pafScanline[j], i, j, >>> GDT_Byte, 0,0); >>> // printf("%u\n", pafScanline[j]); >>> >>> >>> 1) Am I writing pixels the correct way? >>> >>> As of now I am getting just the exact copy of the input TIFF without >>> any pixel modifications. Where step am I doing wrong. >>> >>> Any help would be great! >>> >>> Thanks. >>> _______________________________________________ >>> gdal-dev mailing list >>> gdal-dev@lists.osgeo.org >>> http://lists.osgeo.org/mailman/listinfo/gdal-dev >> >> >> >> -- >> Best regards, >> Chaitanya kumar CH. >> /tʃaɪθənjə/ /kʊmɑr/ >> +91-9494447584 >> 17.2416N 80.1426E >> > _______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev