2004.11.18 18:05 "[Tiff] Using TIFFGetField to get a "Rational"", by Stephen Billard

2004.11.23 20:34 "Re: [Tiff] Using TIFFGetField to get a "Rational"", by Andrey Kiselev

I am new to LibTIFF. I want to get the ResolutionUnit, XResolution, and YResolution from a TIFF file. I have no problem getting the Resolution unit. (Although I did see a strange behavior. If I had not initialized the variable that receives the ResolutionUnit value before calling TIFFGetField, I did not get back the value. If I initialize the variable to 0, I get back the correct unit.)

That is strange. If the file lacks ResolutionUnit tag the variable remains unchanged. In that case you can get a garbage in the variable if it was not properly initialized. I'm recommend using TIFFGetFieldDefaulted() for tags for which default value defined by specification. I'm recommend always initialize variables with a reasonable value.

I am having no luck with the X & Y Resolutions. I suspect that I don't know what kind of variable to receive the "Rational" result. I tried a Real and got garbage back. What should I be using? (I get no errors back from calling TIFFGetField.)

You should use float (32-bit floating point value). The following code should work for you:

        uint16 res_unit;
        float xres = 0.0F, yres = 0.0F;

        TIFFGetFieldDefaulted(tif, TIFFTAG_RESOLUTIONUNIT, &res_unit);
        TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xres);
        TIFFGetField(tif, TIFFTAG_YRESOLUTION, &yres);

Andrey

Andrey V. Kiselev
Home phone: +7 812 5970603 ICQ# 26871517