AWARE SYSTEMS
TIFF and LibTiff Mail List Archive

Thread

2002.08.22 22:17 "Problem Reading MultiPage TIFFs", by Steven Luke
2002.08.22 22:39 "RE: Problem Reading MultiPage TIFFs", by George Rypysc
2002.08.30 19:04 "Re: Problem Reading MultiPage TIFFs", by Steven Luke
2002.08.30 20:05 "RE: Problem Reading MultiPage TIFFs", by Tore Bostrup
2002.08.31 13:12 "Re: Problem Reading MultiPage TIFFs", by Steven Luke
2002.09.02 13:20 "Re: Problem Reading MultiPage TIFFs", by Antonio E. Scuri
2002.09.03 17:58 "RE: Problem Reading MultiPage TIFFs", by Frank Palmieri
2002.09.03 18:32 "Re: Problem Reading MultiPage TIFFs", by Frank Warmerdam
2002.09.05 04:50 "Re: Problem Reading MultiPage TIFFs", by Steven Luke

2002.09.03 17:58 "RE: Problem Reading MultiPage TIFFs", by Frank Palmieri

Steven:

1) To access the offset and byte counts directly, there is no API or interface. You can access them by using the internal structures of the tiff library assuming that they get loaded into those structures. Here's a fragment that shows including the private header files and some code to use them:

#include "tiffiop.h" /* include private headers before public header
*/
#include "tif_dir.h"
#include "tiffio.h"

        *
        *
        *
TIFF* in;
TIFFDirectory *td;

in = TIFFOpen(argv[1], "w");
        *
        *
        *
td = &in->tif_dir;
printf("  %lu %s:\n", (long) td->td_nstrips,

       isTiled(out)? "Tiles": "Strips");
for (s = 0; s < td->td_nstrips; s++)
{
    printf(" %3lu: [%8lu, %8lu]\n",
           (u_long) s,
           (u_long) td->td_stripoffset[s],
           (u_long) td->td_stripbytecount[s]);
}

2) Reading fields is pretty well documented using the TIFFGetField() function. Use the tiffinfo & tiffdump utilities as examples. These would also be good samples to look at the data in your tiff file and modify to determine how well you can access the data with the information above.

Frank Palmieri frank@interscopetech.com 724-934-5770 x29

> -----Original Message-----

> From: owner-tiff@olympiakos.com [mailto:owner-tiff@olympiakos.com] On > Behalf Of Steven Luke

Sorry if this is a re-post, but I seem to have trouble getting mail through.

Thanks for the help on this, but I have run into another problem. It turns out that the images I am working with are not set up with multiple directories.

Instead there is a single directory and all the images are stored contiguously starting at the first StripOffset. So Strip #1 of the second image is stored directly after the last Strip of the first image. Using StripOffsets, StripsPerImage, and StripByteCounts I can find the offset for each additional image, but I am still having problems.

1st: How do I get LibTiff to read the images at these new offsets? I would think there would be a field in the TIFF struct that holds the offset to the image, but I can't acces it and without that I can't read any data past the last row of the first image. Is there a workaround for this? A seek function maybe?

2nd: I can't use the directory counting method to find out how many images are present in the file, since there is only one directory. The number is present in a couple of tags as the 'count' field. Is there a way to get at the count of a field (for data that is stored in arrays)?

3rd: I took at look at the TIFFClientOpen function hoping that it was the answer to my problems, but I don't understand it enough to get started. (You will see how new I am at this with these questions) Where does the thandle_t clientdata handle come from? Is it some value that I assign, arbitrary in nature, or should it be something that really means something (and what)? I would have to write a TIFFlseek function for the TIFFSeekProc callback, but I am not really sure where to get started with this. Could someone show me an example piece of code? Would I have to write callbacks for all the procs listed in the TIFFClientOpen call or would I be able to just pass NULLs to the ones I dont want to use? As you can see, I really am not sure where to get started, if somebody could show me an example program that uses the TIFFClientOpen it would help a lot.

Thanks again,