4  * Copyright (c) 1988-1997 Sam Leffler 
   5  * Copyright (c) 1991-1997 Silicon Graphics, Inc. 
   7  * Permission to use, copy, modify, distribute, and sell this software and 
   8  * its documentation for any purpose is hereby granted without fee, provided 
   9  * that (i) the above copyright notices and this permission notice appear in 
  10  * all copies of the software and related documentation, and (ii) the names of 
  11  * Sam Leffler and Silicon Graphics may not be used in any advertising or 
  12  * publicity relating to the software without the specific, prior written 
  13  * permission of Sam Leffler and Silicon Graphics. 
  15  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 
  19  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 
  20  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 
  21  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
  22  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  31  * TIFF I/O Library Definitions. 
  36  * This define can be used in code that requires 
  37  * compilation-related definitions specific to a 
  38  * version or versions of the library.  Runtime 
  39  * version checking should be done based on the 
  40  * string returned by TIFFGetVersion. 
  42 #define TIFFLIB_VERSION 19970127        /* January 27, 1997 */ 
  45  * TIFF is defined as an incomplete type to hide the 
  46  * library's internal data structures from clients. 
  48 typedef struct tiff TIFF
; 
  51  * The following typedefs define the intrinsic size of 
  52  * data types used in the *exported* interfaces.  These 
  53  * definitions depend on the proper definition of types 
  54  * in tiff.h.  Note also that the varargs interface used 
  55  * to pass tag types and values uses the types defined in 
  58  * NB: ttag_t is unsigned int and not unsigned short because 
  59  *     ANSI C requires that the type before the ellipsis be a 
  60  *     promoted type (i.e. one of int, unsigned int, pointer, 
  61  *     or double) and because we defined pseudo-tags that are 
  62  *     outside the range of legal Aldus-assigned tags. 
  63  * NB: tsize_t is int32 and not uint32 because some functions 
  65  * NB: toff_t is not off_t for many reasons; TIFFs max out at 
  66  *     32-bit file offsets being the most important 
  68 typedef uint32 ttag_t
;          /* directory tag */ 
  69 typedef uint16 tdir_t
;          /* directory index */ 
  70 typedef uint16 tsample_t
;       /* sample number */ 
  71 typedef uint32 tstrip_t
;        /* strip number */ 
  72 typedef uint32 ttile_t
;         /* tile number */ 
  73 typedef int32 tsize_t
;          /* i/o size in bytes */ 
  74 typedef void* tdata_t
;          /* image data ref */ 
  75 typedef int32 toff_t
;           /* file offset */ 
  77 #if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32)) 
  80 #if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows) 
  83 DECLARE_HANDLE(thandle_t
);      /* Win32 file handle */ 
  85 typedef HFILE thandle_t
;        /* client data handle */ 
  88 typedef void* thandle_t
;        /* client data handle */ 
  91 #if defined(__VISAGECPP__) 
  92 #define LINKAGEMODE _Optlink 
 102  * Flags to pass to TIFFPrintDirectory to control 
 103  * printing of data structures that are potentially 
 104  * very large.   Bit-or these flags to enable printing 
 107 #define TIFFPRINT_NONE          0x0             /* no extra info */ 
 108 #define TIFFPRINT_STRIPS        0x1             /* strips/tiles info */ 
 109 #define TIFFPRINT_CURVES        0x2             /* color/gray response curves */ 
 110 #define TIFFPRINT_COLORMAP      0x4             /* colormap */ 
 111 #define TIFFPRINT_JPEGQTABLES   0x100           /* JPEG Q matrices */ 
 112 #define TIFFPRINT_JPEGACTABLES  0x200           /* JPEG AC tables */ 
 113 #define TIFFPRINT_JPEGDCTABLES  0x200           /* JPEG DC tables */ 
 116  * RGBA-style image support. 
 118 typedef unsigned char TIFFRGBValue
;             /* 8-bit samples */ 
 119 typedef struct _TIFFRGBAImage TIFFRGBAImage
; 
 121  * The image reading and conversion routines invoke 
 122  * ``put routines'' to copy/image/whatever tiles of 
 123  * raw image data.  A default set of routines are 
 124  * provided to convert/copy raw image data to 8-bit 
 125  * packed ABGR format rasters.  Applications can supply 
 126  * alternate routines that unpack the data into a 
 127  * different format or, for example, unpack the data 
 128  * and draw the unpacked raster on the display. 
 130 typedef void (LINKAGEMODE 
*tileContigRoutine
) 
 131     (TIFFRGBAImage
*, uint32
*, uint32
, uint32
, uint32
, uint32
, int32
, int32
, 
 133 typedef void (LINKAGEMODE 
*tileSeparateRoutine
) 
 134     (TIFFRGBAImage
*, uint32
*, uint32
, uint32
, uint32
, uint32
, int32
, int32
, 
 135         unsigned char*, unsigned char*, unsigned char*, unsigned char*); 
 139 typedef struct {                                /* YCbCr->RGB support */ 
 140         TIFFRGBValue
* clamptab
;                 /* range clamping table */ 
 145         float   coeffs
[3];                      /* cached for repeated use */ 
 148 struct _TIFFRGBAImage 
{ 
 149         TIFF
*   tif
;                            /* image handle */ 
 150         int     stoponerr
;                      /* stop on read error */ 
 151         int     isContig
;                       /* data is packed/separate */ 
 152         int     alpha
;                          /* type of alpha data present */ 
 153         uint32  width
;                          /* image width */ 
 154         uint32  height
;                         /* image height */ 
 155         uint16  bitspersample
;                  /* image bits/sample */ 
 156         uint16  samplesperpixel
;                /* image samples/pixel */ 
 157         uint16  orientation
;                    /* image orientation */ 
 158         uint16  photometric
;                    /* image photometric interp */ 
 159         uint16
* redcmap
;                        /* colormap pallete */ 
 162                                                 /* get image data routine */ 
 163         int     (LINKAGEMODE 
*get
)(TIFFRGBAImage
*, uint32
*, uint32
, uint32
); 
 165             void (*any
)(TIFFRGBAImage
*); 
 166             tileContigRoutine   contig
; 
 167             tileSeparateRoutine separate
; 
 168         } put
;                                  /* put decoded strip/tile */ 
 169         TIFFRGBValue
* Map
;                      /* sample mapping array */ 
 170         uint32
** BWmap
;                         /* black&white map */ 
 171         uint32
** PALmap
;                        /* palette image map */ 
 172         TIFFYCbCrToRGB
* ycbcr
;                  /* YCbCr conversion state */ 
 179  * Macros for extracting components from the 
 180  * packed ABGR form returned by TIFFReadRGBAImage. 
 182 #define TIFFGetR(abgr)  ((abgr) & 0xff) 
 183 #define TIFFGetG(abgr)  (((abgr) >> 8) & 0xff) 
 184 #define TIFFGetB(abgr)  (((abgr) >> 16) & 0xff) 
 185 #define TIFFGetA(abgr)  (((abgr) >> 24) & 0xff) 
 188  * A CODEC is a software package that implements decoding, 
 189  * encoding, or decoding+encoding of a compression algorithm. 
 190  * The library provides a collection of builtin codecs. 
 191  * More codecs may be registered through calls to the library 
 192  * and/or the builtin implementations may be overridden. 
 194 typedef int (LINKAGEMODE 
*TIFFInitMethod
)(TIFF
*, int); 
 204 #if defined(__cplusplus) 
 207 typedef void (LINKAGEMODE 
*TIFFErrorHandler
)(const char*, const char*, va_list); 
 208 typedef tsize_t (LINKAGEMODE 
*TIFFReadWriteProc
)(thandle_t
, tdata_t
, tsize_t
); 
 209 typedef toff_t (LINKAGEMODE 
*TIFFSeekProc
)(thandle_t
, toff_t
, int); 
 210 typedef int (LINKAGEMODE 
*TIFFCloseProc
)(thandle_t
); 
 211 typedef toff_t (LINKAGEMODE 
*TIFFSizeProc
)(thandle_t
); 
 212 typedef int (LINKAGEMODE 
*TIFFMapFileProc
)(thandle_t
, tdata_t
*, toff_t
*); 
 213 typedef void (LINKAGEMODE 
*TIFFUnmapFileProc
)(thandle_t
, tdata_t
, toff_t
); 
 214 typedef void (LINKAGEMODE 
*TIFFExtendProc
)(TIFF
*); 
 216 extern  const char* TIFFGetVersion(void); 
 218 extern  const TIFFCodec
* TIFFFindCODEC(uint16
); 
 219 extern  TIFFCodec
* TIFFRegisterCODEC(uint16
, const char*, TIFFInitMethod
); 
 220 extern  void TIFFUnRegisterCODEC(TIFFCodec
*); 
 222 extern  tdata_t 
_TIFFmalloc(tsize_t
); 
 223 extern  tdata_t 
_TIFFrealloc(tdata_t
, tsize_t
); 
 224 extern  void _TIFFmemset(tdata_t
, int, tsize_t
); 
 225 extern  void _TIFFmemcpy(tdata_t
, const tdata_t
, tsize_t
); 
 226 extern  int _TIFFmemcmp(const tdata_t
, const tdata_t
, tsize_t
); 
 227 extern  void _TIFFfree(tdata_t
); 
 229 extern  void TIFFClose(TIFF
*); 
 230 extern  int TIFFFlush(TIFF
*); 
 231 extern  int TIFFFlushData(TIFF
*); 
 232 extern  int TIFFGetField(TIFF
*, ttag_t
, ...); 
 233 extern  int TIFFVGetField(TIFF
*, ttag_t
, va_list); 
 234 extern  int TIFFGetFieldDefaulted(TIFF
*, ttag_t
, ...); 
 235 extern  int TIFFVGetFieldDefaulted(TIFF
*, ttag_t
, va_list); 
 236 extern  int TIFFReadDirectory(TIFF
*); 
 237 extern  tsize_t 
TIFFScanlineSize(TIFF
*); 
 238 extern  tsize_t 
TIFFRasterScanlineSize(TIFF
*); 
 239 extern  tsize_t 
TIFFStripSize(TIFF
*); 
 240 extern  tsize_t 
TIFFVStripSize(TIFF
*, uint32
); 
 241 extern  tsize_t 
TIFFTileRowSize(TIFF
*); 
 242 extern  tsize_t 
TIFFTileSize(TIFF
*); 
 243 extern  tsize_t 
TIFFVTileSize(TIFF
*, uint32
); 
 244 extern  uint32 
TIFFDefaultStripSize(TIFF
*, uint32
); 
 245 extern  void TIFFDefaultTileSize(TIFF
*, uint32
*, uint32
*); 
 246 extern  int TIFFFileno(TIFF
*); 
 247 extern  int TIFFGetMode(TIFF
*); 
 248 extern  int TIFFIsTiled(TIFF
*); 
 249 extern  int TIFFIsByteSwapped(TIFF
*); 
 250 extern  int TIFFIsUpSampled(TIFF
*); 
 251 extern  int TIFFIsMSB2LSB(TIFF
*); 
 252 extern  uint32 
TIFFCurrentRow(TIFF
*); 
 253 extern  tdir_t 
TIFFCurrentDirectory(TIFF
*); 
 254 extern  tdir_t 
TIFFNumberOfDirectories(TIFF
*); 
 255 extern  uint32 
TIFFCurrentDirOffset(TIFF
*); 
 256 extern  tstrip_t 
TIFFCurrentStrip(TIFF
*); 
 257 extern  ttile_t 
TIFFCurrentTile(TIFF
*); 
 258 extern  int TIFFReadBufferSetup(TIFF
*, tdata_t
, tsize_t
); 
 259 extern  int TIFFWriteBufferSetup(TIFF
*, tdata_t
, tsize_t
); 
 260 extern  int TIFFLastDirectory(TIFF
*); 
 261 extern  int TIFFSetDirectory(TIFF
*, tdir_t
); 
 262 extern  int TIFFSetSubDirectory(TIFF
*, uint32
); 
 263 extern  int TIFFUnlinkDirectory(TIFF
*, tdir_t
); 
 264 extern  int TIFFSetField(TIFF
*, ttag_t
, ...); 
 265 extern  int TIFFVSetField(TIFF
*, ttag_t
, va_list); 
 266 extern  int TIFFWriteDirectory(TIFF 
*); 
 267 extern  int TIFFReassignTagToIgnore(enum TIFFIgnoreSense
, int); 
 269 #if defined(c_plusplus) || defined(__cplusplus) 
 270 extern  void TIFFPrintDirectory(TIFF
*, FILE*, long = 0); 
 271 extern  int TIFFReadScanline(TIFF
*, tdata_t
, uint32
, tsample_t 
= 0); 
 272 extern  int TIFFWriteScanline(TIFF
*, tdata_t
, uint32
, tsample_t 
= 0); 
 273 extern  int TIFFReadRGBAImage(TIFF
*, uint32
, uint32
, uint32
*, int = 0); 
 275 extern  void TIFFPrintDirectory(TIFF
*, FILE*, long); 
 276 extern  int TIFFReadScanline(TIFF
*, tdata_t
, uint32
, tsample_t
); 
 277 extern  int TIFFWriteScanline(TIFF
*, tdata_t
, uint32
, tsample_t
); 
 278 extern  int TIFFReadRGBAImage(TIFF
*, uint32
, uint32
, uint32
*, int); 
 281 extern  int TIFFReadRGBAStrip(TIFF
*, tstrip_t
, uint32 
* ); 
 282 extern  int TIFFReadRGBATile(TIFF
*, uint32
, uint32
, uint32 
* ); 
 283 extern  int TIFFRGBAImageOK(TIFF
*, char [1024]); 
 284 extern  int TIFFRGBAImageBegin(TIFFRGBAImage
*, TIFF
*, int, char [1024]); 
 285 extern  int TIFFRGBAImageGet(TIFFRGBAImage
*, uint32
*, uint32
, uint32
); 
 286 extern  void TIFFRGBAImageEnd(TIFFRGBAImage
*); 
 287 extern  TIFF
* TIFFOpen(const char*, const char*); 
 288 extern  TIFF
* TIFFFdOpen(int, const char*, const char*); 
 289 extern  TIFF
* TIFFClientOpen(const char*, const char*, 
 291             TIFFReadWriteProc
, TIFFReadWriteProc
, 
 292             TIFFSeekProc
, TIFFCloseProc
, 
 294             TIFFMapFileProc
, TIFFUnmapFileProc
); 
 295 extern  const char* TIFFFileName(TIFF
*); 
 296 extern  void TIFFError(const char*, const char*, ...); 
 297 extern  void TIFFWarning(const char*, const char*, ...); 
 298 extern  TIFFErrorHandler 
TIFFSetErrorHandler(TIFFErrorHandler
); 
 299 extern  TIFFErrorHandler 
TIFFSetWarningHandler(TIFFErrorHandler
); 
 300 extern  TIFFExtendProc 
TIFFSetTagExtender(TIFFExtendProc
); 
 301 extern  ttile_t 
TIFFComputeTile(TIFF
*, uint32
, uint32
, uint32
, tsample_t
); 
 302 extern  int TIFFCheckTile(TIFF
*, uint32
, uint32
, uint32
, tsample_t
); 
 303 extern  ttile_t 
TIFFNumberOfTiles(TIFF
*); 
 304 extern  tsize_t 
TIFFReadTile(TIFF
*, 
 305             tdata_t
, uint32
, uint32
, uint32
, tsample_t
); 
 306 extern  tsize_t 
TIFFWriteTile(TIFF
*, 
 307             tdata_t
, uint32
, uint32
, uint32
, tsample_t
); 
 308 extern  tstrip_t 
TIFFComputeStrip(TIFF
*, uint32
, tsample_t
); 
 309 extern  tstrip_t 
TIFFNumberOfStrips(TIFF
*); 
 310 extern  tsize_t 
TIFFReadEncodedStrip(TIFF
*, tstrip_t
, tdata_t
, tsize_t
); 
 311 extern  tsize_t 
TIFFReadRawStrip(TIFF
*, tstrip_t
, tdata_t
, tsize_t
); 
 312 extern  tsize_t 
TIFFReadEncodedTile(TIFF
*, ttile_t
, tdata_t
, tsize_t
); 
 313 extern  tsize_t 
TIFFReadRawTile(TIFF
*, ttile_t
, tdata_t
, tsize_t
); 
 314 extern  tsize_t 
TIFFWriteEncodedStrip(TIFF
*, tstrip_t
, tdata_t
, tsize_t
); 
 315 extern  tsize_t 
TIFFWriteRawStrip(TIFF
*, tstrip_t
, tdata_t
, tsize_t
); 
 316 extern  tsize_t 
TIFFWriteEncodedTile(TIFF
*, ttile_t
, tdata_t
, tsize_t
); 
 317 extern  tsize_t 
TIFFWriteRawTile(TIFF
*, ttile_t
, tdata_t
, tsize_t
); 
 318 extern  void TIFFSetWriteOffset(TIFF
*, toff_t
); 
 319 extern  void TIFFSwabShort(uint16
*); 
 320 extern  void TIFFSwabLong(uint32
*); 
 321 extern  void TIFFSwabDouble(double*); 
 322 extern  void TIFFSwabArrayOfShort(uint16
*, unsigned long); 
 323 extern  void TIFFSwabArrayOfLong(uint32
*, unsigned long); 
 324 extern  void TIFFSwabArrayOfDouble(double*, unsigned long); 
 325 extern  void TIFFReverseBits(unsigned char *, unsigned long); 
 326 extern  const unsigned char* TIFFGetBitRevTable(int); 
 327 #if defined(__cplusplus) 
 330 #endif /* _TIFFIO_ */