2001.03.05 20:54 "erasing pixels within a box using TIFF library", by Chakravarthy Terlapu
Hi,
I am writing a program to erase pixels from a tiff image using TIFF library. I am using the point in a polygon test to check whether each pixel lies inside the polygon or not. I am having the problem at setting the pixels inside the polygon to white.
if(point_value == 1) //if the point is inside the polygon
{
//how should i set the values of the pixels to white
//i have tried using outbuf[j >> 3] = 0xFF but only a portion of the
// box is getting erased. when i use outbuf[j] = 0XFF it doesnt work.
}
the code is below. It woudl be great if anyone could help me as I got stuck in my work here from the past 4 days.
Thanks
Chak
linebytes = TIFFScanlineSize(in);
outbytes = TIFFScanlineSize(out);
inbuf = (unsigned char*)malloc(linebytes);
outbuf = (unsigned char*)malloc(outbytes);
xp[0] = frc[33].lx; yp[0] = frc[33].ly;
xp[1] = frc[33].rx; yp[1] = frc[33].ry;
xp[2] = frc[33].tx; yp[2] = frc[33].ty;
xp[3] = frc[33].bx; yp[3] = frc[33].by;
for(row=0; row<h; row++)
{
TIFFReadScanline(in, inbuf, row, 0);
memset(outbuf, 0, outbytes);
for(j=0; j<w; j++)
{
point_value = pnpoly(4, xp, yp, (float)j, (float)row);
if(point_value == 1)
{
outbuf[j>>3] = 0xFF;
//if( (inbuf[j>>3] & (0x80 >> (j & 0x07))) != 0 )
//outbuf[j>>3] |= (0x80 >> (j & 0x07));
//outbuf[j>>3] = 0x80 | 0x7F;
}
else
{
if( (inbuf[j>>3] & (0x80 >> (j & 0x07))) != 0 )
outbuf[j>>3] |= (0x80 >> (j & 0x07));
}
}
printf("*");
TIFFWriteScanline(out, outbuf, row, 0 );
}
TIFFClose(in);
TIFFClose(out);
free(inbuf);
free(outbuf);