1998.09.21 18:34 "colormap size problem in tiff file from PC, TIFF 3.4beta036", by Ralf Fassel

Today we received some TIFF file from a customer which was unreadable by libtiff 3.4beta036:

    tiff-v3.4beta036/tools/tiffinfo Filterbank.tif
    Filterbank.tif: Warning, unknown field with tag 32934 (0x80a6) ignored.
    Filterbank.tif: Warning, incorrect count for field "ColorMap" (678, expecting 768); tag ignored.
    Filterbank.tif: TIFF directory is missing required "Colormap" field.

The file was, however, readily displayed on an NT 4.0 box. It turns out that the bail-out-point is in libtiff/tif_dirread.c, around #416 ff.

        case TIFFTAG_COLORMAP:
                 * TransferFunction can have either 1x or 3x data
                 * values; Colormap can have only 3x items.
(1)             v = 1L<<td->td_bitspersample;
                if (dp->tdir_tag == TIFFTAG_COLORMAP ||
                    dp->tdir_count != (uint32) v) {
(2)                     if (!CheckDirCount(tif, dp, (uint32)(3*v)))
                v *= sizeof (uint16);

It turned out that (1) td->td_bitspersample == 8, thus v==256, and dp->tdir_count == 678 (which is only 3*226). Now, the check in (2) CheckDirCount() made the code bail out here, while simply setting v to dp->tdir_count/3 in the debugger fixed the problem in this case and analysed the file properly (and eg. allowed to convert it to postscript).

                v = 1L<<td->td_bitspersample;
    (gdb) print v
    $1 = 256
    (gdb) set variable v=226
    (gdb) continue
    TIFF Directory at offset 0x8
      Subfile Type: (0 = 0x0)
      Image Width: 393 Image Length: 393
      Resolution: 100, 100 pixels/inch
      Bits/Sample: 8
      Compression Scheme: None
      Photometric Interpretation: palette color (RGB from colormap)
      FillOrder: msb-to-lsb
      Software: "Oi/GFS, writer v00.06.00P, (c) Wang Labs, Inc. 1990, 1991"
      Orientation: row 0 top, col 0 lhs
      Samples/Pixel: 1
      Rows/Strip: 80
      Planar Configuration: single image plane
      Color Map: (present)
    Program exited normally.

I don't know what the *real* problem is and whether the other software is in error in writing a tdir_count of 226 instead of the expected 256, but maybe the problem at this point could be `solved' by resetting v to what was found in the file instead of ignoring the stuff?

Anybody knowledgeable can comment on that topic? The TIFF file in question is available on request.


Don't forget about `C-c C-p C-p' and `C-u C-c C-p c C-t'.
                    --Barry A. Warsaw on gnu.emacs.help