tif_dir.h
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:7k
源码类别:

打印编程

开发平台:

Visual C++

  1. /* $Id: tif_dir.h,v 1.28 2005/12/26 14:31:25 dron Exp $ */
  2. /*
  3.  * Copyright (c) 1988-1997 Sam Leffler
  4.  * Copyright (c) 1991-1997 Silicon Graphics, Inc.
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and 
  7.  * its documentation for any purpose is hereby granted without fee, provided
  8.  * that (i) the above copyright notices and this permission notice appear in
  9.  * all copies of the software and related documentation, and (ii) the names of
  10.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  11.  * publicity relating to the software without the specific, prior written
  12.  * permission of Sam Leffler and Silicon Graphics.
  13.  * 
  14.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  15.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  16.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  17.  * 
  18.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  19.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  20.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  21.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  22.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  23.  * OF THIS SOFTWARE.
  24.  */
  25. #ifndef _TIFFDIR_
  26. #define _TIFFDIR_
  27. /*
  28.  * ``Library-private'' Directory-related Definitions.
  29.  */
  30. /*
  31.  * Internal format of a TIFF directory entry.
  32.  */
  33. typedef struct {
  34. #define FIELD_SETLONGS 4
  35. /* bit vector of fields that are set */
  36. unsigned long td_fieldsset[FIELD_SETLONGS];
  37. uint32 td_imagewidth, td_imagelength, td_imagedepth;
  38. uint32 td_tilewidth, td_tilelength, td_tiledepth;
  39. uint32 td_subfiletype;
  40. uint16 td_bitspersample;
  41. uint16 td_sampleformat;
  42. uint16 td_compression;
  43. uint16 td_photometric;
  44. uint16 td_threshholding;
  45. uint16 td_fillorder;
  46. uint16 td_orientation;
  47. uint16 td_samplesperpixel;
  48. uint32 td_rowsperstrip;
  49. uint16 td_minsamplevalue, td_maxsamplevalue;
  50. double td_sminsamplevalue, td_smaxsamplevalue;
  51. float td_xresolution, td_yresolution;
  52. uint16 td_resolutionunit;
  53. uint16 td_planarconfig;
  54. float td_xposition, td_yposition;
  55. uint16 td_pagenumber[2];
  56. uint16* td_colormap[3];
  57. uint16 td_halftonehints[2];
  58. uint16 td_extrasamples;
  59. uint16* td_sampleinfo;
  60. tstrip_t td_stripsperimage;
  61. tstrip_t td_nstrips; /* size of offset & bytecount arrays */
  62. uint32* td_stripoffset;
  63. uint32* td_stripbytecount;
  64. int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */
  65. uint16 td_nsubifd;
  66. uint32* td_subifd;
  67. /* YCbCr parameters */
  68. uint16 td_ycbcrsubsampling[2];
  69. uint16 td_ycbcrpositioning;
  70. /* Colorimetry parameters */
  71. uint16* td_transferfunction[3];
  72. /* CMYK parameters */
  73. int td_inknameslen;
  74. char* td_inknames;
  75. int     td_customValueCount;
  76.         TIFFTagValue *td_customValues;
  77. } TIFFDirectory;
  78. /*
  79.  * Field flags used to indicate fields that have
  80.  * been set in a directory, and to reference fields
  81.  * when manipulating a directory.
  82.  */
  83. /*
  84.  * FIELD_IGNORE is used to signify tags that are to
  85.  * be processed but otherwise ignored.  This permits
  86.  * antiquated tags to be quietly read and discarded.
  87.  * Note that a bit *is* allocated for ignored tags;
  88.  * this is understood by the directory reading logic
  89.  * which uses this fact to avoid special-case handling
  90.  */ 
  91. #define FIELD_IGNORE 0
  92. /* multi-item fields */
  93. #define FIELD_IMAGEDIMENSIONS 1
  94. #define FIELD_TILEDIMENSIONS 2
  95. #define FIELD_RESOLUTION 3
  96. #define FIELD_POSITION 4
  97. /* single-item fields */
  98. #define FIELD_SUBFILETYPE 5
  99. #define FIELD_BITSPERSAMPLE 6
  100. #define FIELD_COMPRESSION 7
  101. #define FIELD_PHOTOMETRIC 8
  102. #define FIELD_THRESHHOLDING 9
  103. #define FIELD_FILLORDER 10
  104. #define FIELD_ORIENTATION 15
  105. #define FIELD_SAMPLESPERPIXEL 16
  106. #define FIELD_ROWSPERSTRIP 17
  107. #define FIELD_MINSAMPLEVALUE 18
  108. #define FIELD_MAXSAMPLEVALUE 19
  109. #define FIELD_PLANARCONFIG 20
  110. #define FIELD_RESOLUTIONUNIT 22
  111. #define FIELD_PAGENUMBER 23
  112. #define FIELD_STRIPBYTECOUNTS 24
  113. #define FIELD_STRIPOFFSETS 25
  114. #define FIELD_COLORMAP 26
  115. #define FIELD_EXTRASAMPLES 31
  116. #define FIELD_SAMPLEFORMAT 32
  117. #define FIELD_SMINSAMPLEVALUE 33
  118. #define FIELD_SMAXSAMPLEVALUE 34
  119. #define FIELD_IMAGEDEPTH 35
  120. #define FIELD_TILEDEPTH 36
  121. #define FIELD_HALFTONEHINTS 37
  122. #define FIELD_YCBCRSUBSAMPLING 39
  123. #define FIELD_YCBCRPOSITIONING 40
  124. #define FIELD_TRANSFERFUNCTION 44
  125. #define FIELD_INKNAMES 46
  126. #define FIELD_SUBIFD 49
  127. /*      FIELD_CUSTOM (see tiffio.h)     65 */
  128. /* end of support for well-known tags; codec-private tags follow */
  129. #define FIELD_CODEC 66 /* base of codec-private tags */
  130. /*
  131.  * Pseudo-tags don't normally need field bits since they
  132.  * are not written to an output file (by definition).
  133.  * The library also has express logic to always query a
  134.  * codec for a pseudo-tag so allocating a field bit for
  135.  * one is a waste.   If codec wants to promote the notion
  136.  * of a pseudo-tag being ``set'' or ``unset'' then it can
  137.  * do using internal state flags without polluting the
  138.  * field bit space defined for real tags.
  139.  */
  140. #define FIELD_PSEUDO 0
  141. #define FIELD_LAST (32*FIELD_SETLONGS-1)
  142. #define TIFFExtractData(tif, type, v) 
  143.     ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? 
  144.         ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : 
  145. (v) & (tif)->tif_typemask[type]))
  146. #define TIFFInsertData(tif, type, v) 
  147.     ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? 
  148.         ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : 
  149. (v) & (tif)->tif_typemask[type]))
  150. #define BITn(n) (((unsigned long)1L)<<((n)&0x1f)) 
  151. #define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32]) 
  152. #define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) 
  153. #define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field))
  154. #define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field))
  155. #define FieldSet(fields, f) (fields[(f)/32] & BITn(f))
  156. #define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f))
  157. #if defined(__cplusplus)
  158. extern "C" {
  159. #endif
  160. extern const TIFFFieldInfo *_TIFFGetFieldInfo(size_t *);
  161. extern const TIFFFieldInfo *_TIFFGetExifFieldInfo(size_t *);
  162. extern void _TIFFSetupFieldInfo(TIFF*, const TIFFFieldInfo[], size_t);
  163. extern void _TIFFPrintFieldInfo(TIFF*, FILE*);
  164. extern TIFFDataType _TIFFSampleToTagType(TIFF*);
  165. extern  const TIFFFieldInfo* _TIFFFindOrRegisterFieldInfo( TIFF *tif,
  166.    ttag_t tag,
  167.    TIFFDataType dt );
  168. extern  TIFFFieldInfo* _TIFFCreateAnonFieldInfo( TIFF *tif, ttag_t tag,
  169.                                                  TIFFDataType dt );
  170. #define _TIFFMergeFieldInfo     TIFFMergeFieldInfo
  171. #define _TIFFFindFieldInfo     TIFFFindFieldInfo
  172. #define _TIFFFindFieldInfoByName    TIFFFindFieldInfoByName
  173. #define _TIFFFieldWithTag     TIFFFieldWithTag
  174. #define _TIFFFieldWithName     TIFFFieldWithName
  175. #if defined(__cplusplus)
  176. }
  177. #endif
  178. #endif /* _TIFFDIR_ */
  179. /* vim: set ts=8 sts=8 sw=8 noet: */