1Date: Fri, 01 Aug 1997 20:14:52 MDT 2To: Sam Leffler <sam@cthulhu.engr.sgi.com> 3 4From: "Conrad J. Poelman (WSAT)" <poelmanc@plk.af.mil> 5Subject: Potential TIFF library additions 6 7Delivery-Date: Fri, 01 Aug 1997 19:21:06 -0700 8 9Sam, 10 11You probably don't remember me, but I sent in a couple of bug fixes 12regarding the TIFF library about a 16 months ago or so... 13 14I just wanted to send you two other additions that I have made to our 15local version of the TIFF library in hopes that you will want to 16incorporate them into your next major release of the TIFF library. 17(These additions are based on TIFF version 3.4beta31, but they sit on 18top of the library so they shouldn't be much trouble to incorporate them 19into any more recent version.) They are internally documented to a 20reasonable extent and we've been successfully using them in our code 21here for over a year. If you think they would make good additions to the 22TIFF library, I'd be happy to clean them up more, document them more, 23and/or integrate them with the latest version of the TIFF library, but I 24figured I'd see if you were interested in using them before I went to 25all that trouble. 26 27TIFF Image Iterator 28------------------- 29Your ReadRGBA() routine works well for reading many different formats 30(TILED, STIP, compressed or not, etc.) of the most basic types of data 31(RGB, 8-bit greyscale, 8-bit colormapped) into an SGI-style data array, 32and serves as a good template for users with other needs. I used it as 33an exmaple of how to make an iterator which, rather than fill a data 34array, calls an arbitrary user-supplied callback function for each 35"chunk" of data - that "chunk" might be a strip or a tile, and might 36have one sample-per-pixel or two, and might be 8-bit data or 16-bit or 3724-bit. The callback function can do whatever it wants with the data - 38store it in a big array, convert it to RGBA, or draw it directly to the 39screen. I was able to use this iterator to read 16-bit greyscale and 32- 40and 64-bit floating point data, which wasn't possible with ReadRGBA(). 41 42I have tested this routine with 8- and 16-bit greyscale data as well as 43with 32- and 64-bit floating point data. I believe nearly all of our 44data is organized in strips, so actually I'd appreciate it if you had 45some tiled images that I could test it with. 46 47It should certainly be possible and would be cleanest to reimplement 48ReadRGBA() in terms of the image iterator, but I haven't done that. 49 50 51Private Sub-Directory Read/Write 52-------------------------------- 53TIFF-PL is a Phillips Laboratory extension to the TIFF tags that allows 54us to store satellite imaging-specific information in a TIFF format, 55such as the satellite's trajectory, the imaging time, etc. In order to 56give us the flexibility to modify the tag definitions without getting 57approval from the TIFF committee every time, we were given only three 58TIFF tags - a PL signature, a PL version number, and PL directory 59offset, which lists the position in the file at which to find a private 60sub-directory of tags-value pairs. So I wrote two routines: 61TIFFWritePrivateDataSubDirectory(), which takes a list of tags and a 62"get" function and writes the tag values into the TIFF file, returning 63the offset within the file at which it wrote the directory; and 64TIFFReadPrivateDataSubDirectory(), which takes an offset, a list of 65tags, and a "set" function and reads all the data from the private 66directory. The functions themselves are pretty simple. (The files are 67huge because I had to basically copy all of the tif_dirread.c and 68tif_dirwrite.c files in order to access the various fetching routines 69which were all declared static and therefore inaccessible in the TIFF 70library.) 71 72 73I'm including the four source files (tif_imgiter.h, tif_imgiter.c, 74tif_pdsdirread.c, tif_pdsdirwrite.c) in case you want to take a look at 75them. I can also send you some sample code that uses them if you like. 76If you're interested in having them incorporated into the standard TIFF 77library, I'd be happy to do that integration and clean up and document 78the routines. (For example, I've already realized that instead of 79limiting the SEP callback function to three bands (R,G,B) it should take 80an array to enable the handling of n-banded multi-spectral data...) If 81not, I'll just leave them as they are, since they work fine for us now. 82 83Holler if you have any questions. 84 85-- Conrad 86__________________________________________________________________ 87 Capt Conrad J. Poelman PL/WSAT (Phillips Laboratory) 88 505-846-4347 3550 Aberdeen Ave SE 89 (FAX) 505-846-4374 Kirtland AFB, NM 87117-5776 90 91