| AWARE [SYSTEMS] | Imaging expertise for the Delphi developer | |||||||
![]() |
TIFF and LibTiff Mailing List Archive | |||||||
LibTiff Mailing List
TIFF and LibTiff Mailing List Archive Contact
The TIFF Mailing List Homepage |
Thread2008.11.26 09:37 "Help write 16bites grey level image", by Cristian Perca Hi,
I have a problem while trying to write a 16 bites grey level TIFF image.
Here is a part of the code. The compilation and the execution are OK but the
image I get has the expected size but all pixels are black.
If someone has any idea I would really appreciated.
Thank you
char *flatBuffer=NULL;
TIFF *flatTiff=NULL;
flatBuffer=malloc(bufferSize);
/*test: fill the image with average of input images in imageArray*/
//imageArray is an dynamical array of struct, each object contains an
image
//All images are correctly read and object buffers filled
for (count = 0; count < bufferSize; count +=2) {
uint32 sumPixel=0;
for(i=0; i<noFiles; i++) {
//noFiles is the number of input images == number of
created objects
sumPixel += (*(uint16 *)((imageArray+i) -> buffer + count));
}
*(uint16 *)(flatBuffer+count) = (uint16)sumPixel/noFiles;
}
if((flatTiff = TIFFOpen("flat.tiff", "w")) == NULL){
fprintf(stderr, "Could not open flat.tif for writing\n");
exit(42);
}
TIFFSetField(flatTiff, TIFFTAG_IMAGEWIDTH, width);
TIFFSetField(flatTiff, TIFFTAG_IMAGELENGTH, height);
TIFFSetField(flatTiff, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
TIFFSetField(flatTiff, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(flatTiff, TIFFTAG_BITSPERSAMPLE, bps); //bps=16
TIFFSetField(flatTiff, TIFFTAG_SAMPLESPERPIXEL, spp); //spp=1
TIFFSetField(flatTiff, TIFFTAG_ROWSPERSTRIP, height); // put all
rows(==height no of rows) in one strip
TIFFSetField(flatTiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
TIFFSetField(flatTiff, TIFFTAG_FILLORDER, FILLORDER_MSB2LSB);
if( i=TIFFWriteEncodedStrip(flatTiff, 0, flatBuffer, bufferSize) == -1)
{
fprintf(stderr, "Error while writing image to file!");
exit(42);
}
//the image has only black pixels, but if I print flatBuffer on the screen I
get the expected values:
//printf("%d %d\n", *(uint16 *)(flatBuffer+0), *(uint16 *)(flatBuffer+2));
TIFFClose(flatTiff);
}
|
|||||||