README 4.5 KB

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