2006.08.04 15:00 "RE: [Tiff] libTiff and MSVC 6.0", by
Sean wrote:
__declspec(dllexport) write2DTIFF(char *fname,
unsigned long *buf,
tif = TIFFOpen(fname, "w");
TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW);
TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 16);
Okay, some more things have occurred to me. Two potential problems:
- BitsPerSample is set to 16, while the allowed values (for greyscale) are 4 and 8.
- "unsigned long *buf" points to 32-bit values, which differ from the BitsPerSample size (16-bit samples).
Try using a value of 8 for BitsPerSample, change "unsigned long *buf" to "unsigned char * buf", copy your original data into a temporary buffer, which contains the original samples each divided by 256 (or bit-shifted right by 8), and pass that temporary buffer.
TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1);
TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
if((TIFFWriteEncodedStrip(tif, 0, buf, width*height)) == -1){
fprintf(stderr, "TIFFWriteEncodedStrip failed.\n");
}
TIFFClose(tif);