| 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 |
Thread2007.03.15 12:34 "tiff 32bit float writer", by Giuseppe RotaHi All,
I am using libtiff 3.7.4, and I have a strange problem with a 32bit float
(not logluv) tiff writer. (I didn't find the solution on the ML archive) The
problem is that the resulting file size seems to be "height" times more than
expected.
I.e. if I am saving a 100x74 image I expect a size roughly close to:
100*74 px * 3 chan/px * 4 byte/chan = 88800 bytes.
Instead I get a file size of 8880732. (100 times more).
If I reduce the image to 10x7 pixels i get a file size of 8596 B, rather
than the expected 840B.
Here's the code:
//R,G,B are arrays of float wrapped in a class.
width=R->getWidth();
height=R->getHeight();
tif = TIFFOpen(filename, "w");
TIFFSetField (tif, TIFFTAG_IMAGEWIDTH, width);
TIFFSetField (tif, TIFFTAG_IMAGELENGTH, height);
TIFFSetField (tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField (tif, TIFFTAG_SAMPLESPERPIXEL, 3);
TIFFSetField (tif, TIFFTAG_ROWSPERSTRIP, 1);
TIFFSetField (tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
TIFFSetField (tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
TIFFSetField (tif, TIFFTAG_BITSPERSAMPLE, 32);
tsize_t strip_size = TIFFStripSize (tif);
tstrip_t strips_num = TIFFNumberOfStrips (tif);
float* strip_buf=(float*)_TIFFmalloc(strip_size); //enough space for a
strip
for (unsigned int s=0; s<strips_num; s++) {
for (unsigned int col=0; col<width; col++) {
strip_buf[3*col+0]=(*R)(col,s);
strip_buf[3*col+1]=(*G)(col,s);
strip_buf[3*col+2]=(*B)(col,s);
if (TIFFWriteEncodedStrip (tif, s, strip_buf, strip_size) == 0)
{
//deal with error
}
}
}
_TIFFfree(strip_buf);
TIFFClose(tif);
I also tried to use all the rows as a single strip but it didn't change the
outcome.
Thanks in advance,
Giuseppe
|
|||||||