2
0

LibTiffDynLib.pas 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. unit LibTiffDynLib;
  2. {$IFDEF FPC}
  3. {$MODE DELPHI}
  4. {$ENDIF}
  5. // We prefer dynamic loading of the library (GetProcAddress/dlsym way)
  6. // so that we don't get a crash with "libtiff not found!" message on startup
  7. // if libtiff is not found in user's system.
  8. {$DEFINE DYNAMIC_DLL_LOADING}
  9. interface
  10. uses
  11. {$IFDEF MSWINDOWS}
  12. Windows,
  13. {$ENDIF}
  14. SysUtils;
  15. type
  16. va_list = Pointer;
  17. {$IFNDEF FPC}
  18. {$IF CompilerVersion <= 18.5}
  19. SizeInt = Integer;
  20. {$ELSE}
  21. SizeInt = NativeInt;
  22. {$IFEND}
  23. {$ENDIF}
  24. type
  25. tmsize_t = SizeInt;
  26. tsize_t = SizeInt;
  27. // typedef uint64 toff_t; /* file offset */
  28. toff_t = Int64;
  29. poff_t = ^toff_t;
  30. tsample_t = Word;
  31. // Beware: THandle is 32bit in size even on 64bit Linux - this may cause
  32. // problems as pointers to client data are passed in thandle_t vars.
  33. thandle_t = THandle;
  34. tdata_t = Pointer;
  35. ttag_t = UInt32;
  36. tdir_t = Word;
  37. tstrip_t = UInt32;
  38. const
  39. // LibTiff 4.0
  40. {$IF Defined(MSWINDOWS)}
  41. SLibName = 'libtiff.dll'; // make sure you have DLL with the same bitness as your app!
  42. {$ELSEIF Defined(DARWIN)} // macOS
  43. SLibName = 'libtiff.5.dylib';
  44. {$ELSE} // Linux, BSD
  45. SLibName = 'libtiff.so.5'; // yes, SONAME for libtiff v4.0 is actually libtiff5 (and libtiff.so.4 is libtiff v3.9)
  46. {$IFEND}
  47. TIFF_NOTYPE = 0;
  48. TIFF_BYTE = 1; { 8-bit unsigned integer }
  49. TIFF_ASCII = 2; { 8-bit bytes w/ last byte null }
  50. TIFF_SHORT = 3; { 16-bit unsigned integer }
  51. TIFF_LONG = 4; { 32-bit unsigned integer }
  52. TIFF_RATIONAL = 5; { 64-bit unsigned fraction }
  53. TIFF_SBYTE = 6; { !8-bit signed integer }
  54. TIFF_UNDEFINED = 7; { !8-bit untyped data }
  55. TIFF_SSHORT = 8; { !16-bit signed integer }
  56. TIFF_SLONG = 9; { !32-bit signed integer }
  57. TIFF_SRATIONAL = 10; { !64-bit signed fraction }
  58. TIFF_FLOAT = 11; { !32-bit IEEE floating point }
  59. TIFF_DOUBLE = 12; { !64-bit IEEE floating point }
  60. TIFF_IFD = 13; { %32-bit unsigned integer (offset) }
  61. TIFF_UNICODE = 14;
  62. TIFF_COMPLEX = 15;
  63. TIFF_LONG8 = 16;
  64. TIFF_SLONG8 = 17;
  65. TIFF_IFD8 = 18;
  66. TIFFTAG_SUBFILETYPE = 254; { subfile data descriptor }
  67. FILETYPE_REDUCEDIMAGE = $1; { reduced resolution version }
  68. FILETYPE_PAGE = $2; { one page of many }
  69. FILETYPE_MASK = $4; { transparency mask }
  70. TIFFTAG_OSUBFILETYPE = 255; { kind of data in subfile }
  71. OFILETYPE_IMAGE = 1; { full resolution image data }
  72. OFILETYPE_REDUCEDIMAGE = 2; { reduced size image data }
  73. OFILETYPE_PAGE = 3; { one page of many }
  74. TIFFTAG_IMAGEWIDTH = 256; { image width in pixels }
  75. TIFFTAG_IMAGELENGTH = 257; { image height in pixels }
  76. TIFFTAG_BITSPERSAMPLE = 258; { bits per channel (sample) }
  77. TIFFTAG_COMPRESSION = 259; { data compression technique }
  78. COMPRESSION_NONE = 1; { dump mode }
  79. COMPRESSION_CCITTRLE = 2; { CCITT modified Huffman RLE }
  80. COMPRESSION_CCITTFAX3 = 3; { CCITT Group 3 fax encoding }
  81. COMPRESSION_CCITT_T4 = 3; { CCITT T.4 (TIFF 6 name) }
  82. COMPRESSION_CCITTFAX4 = 4; { CCITT Group 4 fax encoding }
  83. COMPRESSION_CCITT_T6 = 4; { CCITT T.6 (TIFF 6 name) }
  84. COMPRESSION_LZW = 5; { Lempel-Ziv & Welch }
  85. COMPRESSION_OJPEG = 6; { !6.0 JPEG }
  86. COMPRESSION_JPEG = 7; { %JPEG DCT compression }
  87. COMPRESSION_NEXT = 32766; { NeXT 2-bit RLE }
  88. COMPRESSION_CCITTRLEW = 32771; { #1 w/ word alignment }
  89. COMPRESSION_PACKBITS = 32773; { Macintosh RLE }
  90. COMPRESSION_THUNDERSCAN = 32809; { ThunderScan RLE }
  91. { codes 32895-32898 are reserved for ANSI IT8 TIFF/IT <[email protected]) }
  92. COMPRESSION_IT8CTPAD = 32895; { IT8 CT w/padding }
  93. COMPRESSION_IT8LW = 32896; { IT8 Linework RLE }
  94. COMPRESSION_IT8MP = 32897; { IT8 Monochrome picture }
  95. COMPRESSION_IT8BL = 32898; { IT8 Binary line art }
  96. { compression codes 32908-32911 are reserved for Pixar }
  97. COMPRESSION_PIXARFILM = 32908; { Pixar companded 10bit LZW }
  98. COMPRESSION_PIXARLOG = 32909; { Pixar companded 11bit ZIP }
  99. COMPRESSION_DEFLATE = 32946; { Deflate compression }
  100. COMPRESSION_ADOBE_DEFLATE = 8; { Deflate compression, as recognized by Adobe }
  101. { compression code 32947 is reserved for Oceana Matrix <[email protected]> }
  102. COMPRESSION_DCS = 32947; { Kodak DCS encoding }
  103. COMPRESSION_JBIG = 34661; { ISO JBIG }
  104. COMPRESSION_SGILOG = 34676; { SGI Log Luminance RLE }
  105. COMPRESSION_SGILOG24 = 34677; { SGI Log 24-bit packed }
  106. COMPRESSION_JP2000 = 34712; { Leadtools JPEG2000 }
  107. TIFFTAG_PHOTOMETRIC = 262; { photometric interpretation }
  108. PHOTOMETRIC_MINISWHITE = 0; { min value is white }
  109. PHOTOMETRIC_MINISBLACK = 1; { min value is black }
  110. PHOTOMETRIC_RGB = 2; { RGB color model }
  111. PHOTOMETRIC_PALETTE = 3; { color map indexed }
  112. PHOTOMETRIC_MASK = 4; { $holdout mask }
  113. PHOTOMETRIC_SEPARATED = 5; { !color separations }
  114. PHOTOMETRIC_YCBCR = 6; { !CCIR 601 }
  115. PHOTOMETRIC_CIELAB = 8; { !1976 CIE L*a*b* }
  116. PHOTOMETRIC_ICCLAB = 9; { ICC L*a*b* [Adobe TIFF Technote 4] }
  117. PHOTOMETRIC_ITULAB = 10; { ITU L*a*b* }
  118. PHOTOMETRIC_LOGL = 32844; { CIE Log2(L) }
  119. PHOTOMETRIC_LOGLUV = 32845; { CIE Log2(L) (u',v') }
  120. TIFFTAG_THRESHHOLDING = 263; { thresholding used on data }
  121. THRESHHOLD_BILEVEL = 1; { b&w art scan }
  122. THRESHHOLD_HALFTONE = 2; { or dithered scan }
  123. THRESHHOLD_ERRORDIFFUSE = 3; { usually floyd-steinberg }
  124. TIFFTAG_CELLWIDTH = 264; { +dithering matrix width }
  125. TIFFTAG_CELLLENGTH = 265; { +dithering matrix height }
  126. TIFFTAG_FILLORDER = 266; { data order within a byte }
  127. FILLORDER_MSB2LSB = 1; { most significant -> least }
  128. FILLORDER_LSB2MSB = 2; { least significant -> most }
  129. TIFFTAG_DOCUMENTNAME = 269; { name of doc. image is from }
  130. TIFFTAG_IMAGEDESCRIPTION = 270; { info about image }
  131. TIFFTAG_MAKE = 271; { scanner manufacturer name }
  132. TIFFTAG_MODEL = 272; { scanner model name/number }
  133. TIFFTAG_STRIPOFFSETS = 273; { offsets to data strips }
  134. TIFFTAG_ORIENTATION = 274; { +image orientation }
  135. ORIENTATION_TOPLEFT = 1; { row 0 top, col 0 lhs }
  136. ORIENTATION_TOPRIGHT = 2; { row 0 top, col 0 rhs }
  137. ORIENTATION_BOTRIGHT = 3; { row 0 bottom, col 0 rhs }
  138. ORIENTATION_BOTLEFT = 4; { row 0 bottom, col 0 lhs }
  139. ORIENTATION_LEFTTOP = 5; { row 0 lhs, col 0 top }
  140. ORIENTATION_RIGHTTOP = 6; { row 0 rhs, col 0 top }
  141. ORIENTATION_RIGHTBOT = 7; { row 0 rhs, col 0 bottom }
  142. ORIENTATION_LEFTBOT = 8; { row 0 lhs, col 0 bottom }
  143. TIFFTAG_SAMPLESPERPIXEL = 277; { samples per pixel }
  144. TIFFTAG_ROWSPERSTRIP = 278; { rows per strip of data }
  145. TIFFTAG_STRIPBYTECOUNTS = 279; { bytes counts for strips }
  146. TIFFTAG_MINSAMPLEVALUE = 280; { +minimum sample value }
  147. TIFFTAG_MAXSAMPLEVALUE = 281; { +maximum sample value }
  148. TIFFTAG_XRESOLUTION = 282; { pixels/resolution in x }
  149. TIFFTAG_YRESOLUTION = 283; { pixels/resolution in y }
  150. TIFFTAG_PLANARCONFIG = 284; { storage organization }
  151. PLANARCONFIG_CONTIG = 1; { single image plane }
  152. PLANARCONFIG_SEPARATE = 2; { separate planes of data }
  153. TIFFTAG_PAGENAME = 285; { page name image is from }
  154. TIFFTAG_XPOSITION = 286; { x page offset of image lhs }
  155. TIFFTAG_YPOSITION = 287; { y page offset of image lhs }
  156. TIFFTAG_FREEOFFSETS = 288; { +byte offset to free block }
  157. TIFFTAG_FREEBYTECOUNTS = 289; { +sizes of free blocks }
  158. {matched with tag reference up to this point}
  159. TIFFTAG_GRAYRESPONSEUNIT = 290; { $gray scale curve accuracy }
  160. GRAYRESPONSEUNIT_10S = 1; { tenths of a unit }
  161. GRAYRESPONSEUNIT_100S = 2; { hundredths of a unit }
  162. GRAYRESPONSEUNIT_1000S = 3; { thousandths of a unit }
  163. GRAYRESPONSEUNIT_10000S = 4; { ten-thousandths of a unit }
  164. GRAYRESPONSEUNIT_100000S = 5; { hundred-thousandths }
  165. TIFFTAG_GRAYRESPONSECURVE = 291; { $gray scale response curve }
  166. TIFFTAG_GROUP3OPTIONS = 292; { 32 flag bits }
  167. TIFFTAG_T4OPTIONS = 292; { TIFF 6.0 proper name alias }
  168. GROUP3OPT_2DENCODING = $1; { 2-dimensional coding }
  169. GROUP3OPT_UNCOMPRESSED = $2; { data not compressed }
  170. GROUP3OPT_FILLBITS = $4; { fill to byte boundary }
  171. TIFFTAG_GROUP4OPTIONS = 293; { 32 flag bits }
  172. TIFFTAG_T6OPTIONS = 293; { TIFF 6.0 proper name }
  173. GROUP4OPT_UNCOMPRESSED = $2; { data not compressed }
  174. TIFFTAG_RESOLUTIONUNIT = 296; { units of resolutions }
  175. RESUNIT_NONE = 1; { no meaningful units }
  176. RESUNIT_INCH = 2; { english }
  177. RESUNIT_CENTIMETER = 3; { metric }
  178. TIFFTAG_PAGENUMBER = 297; { page numbers of multi-page }
  179. TIFFTAG_COLORRESPONSEUNIT = 300; { $color curve accuracy }
  180. COLORRESPONSEUNIT_10S = 1; { tenths of a unit }
  181. COLORRESPONSEUNIT_100S = 2; { hundredths of a unit }
  182. COLORRESPONSEUNIT_1000S = 3; { thousandths of a unit }
  183. COLORRESPONSEUNIT_10000S = 4; { ten-thousandths of a unit }
  184. COLORRESPONSEUNIT_100000S = 5; { hundred-thousandths }
  185. TIFFTAG_TRANSFERFUNCTION = 301; { !colorimetry info }
  186. TIFFTAG_SOFTWARE = 305; { name & release }
  187. TIFFTAG_DATETIME = 306; { creation date and time }
  188. TIFFTAG_ARTIST = 315; { creator of image }
  189. TIFFTAG_HOSTCOMPUTER = 316; { machine where created }
  190. TIFFTAG_PREDICTOR = 317; { prediction scheme w/ LZW }
  191. TIFFTAG_WHITEPOINT = 318; { image white point }
  192. TIFFTAG_PRIMARYCHROMATICITIES = 319; { !primary chromaticities }
  193. TIFFTAG_COLORMAP = 320; { RGB map for pallette image }
  194. TIFFTAG_HALFTONEHINTS = 321; { !highlight+shadow info }
  195. TIFFTAG_TILEWIDTH = 322; { !rows/data tile }
  196. TIFFTAG_TILELENGTH = 323; { !cols/data tile }
  197. TIFFTAG_TILEOFFSETS = 324; { !offsets to data tiles }
  198. TIFFTAG_TILEBYTECOUNTS = 325; { !byte counts for tiles }
  199. TIFFTAG_BADFAXLINES = 326; { lines w/ wrong pixel count }
  200. TIFFTAG_CLEANFAXDATA = 327; { regenerated line info }
  201. CLEANFAXDATA_CLEAN = 0; { no errors detected }
  202. CLEANFAXDATA_REGENERATED = 1; { receiver regenerated lines }
  203. CLEANFAXDATA_UNCLEAN = 2; { uncorrected errors exist }
  204. TIFFTAG_CONSECUTIVEBADFAXLINES = 328; { max consecutive bad lines }
  205. TIFFTAG_SUBIFD = 330; { subimage descriptors }
  206. TIFFTAG_INKSET = 332; { !inks in separated image }
  207. INKSET_CMYK = 1; { !cyan-magenta-yellow-black color }
  208. INKSET_MULTIINK = 2; { !multi-ink or hi-fi color }
  209. TIFFTAG_INKNAMES = 333; { !ascii names of inks }
  210. TIFFTAG_NUMBEROFINKS = 334; { !number of inks }
  211. TIFFTAG_DOTRANGE = 336; { !0% and 100% dot codes }
  212. TIFFTAG_TARGETPRINTER = 337; { !separation target }
  213. TIFFTAG_EXTRASAMPLES = 338; { !info about extra samples }
  214. EXTRASAMPLE_UNSPECIFIED = 0; { !unspecified data }
  215. EXTRASAMPLE_ASSOCALPHA = 1; { !associated alpha data }
  216. EXTRASAMPLE_UNASSALPHA = 2; { !unassociated alpha data }
  217. TIFFTAG_SAMPLEFORMAT = 339; { !data sample format }
  218. SAMPLEFORMAT_UINT = 1; { !unsigned integer data }
  219. SAMPLEFORMAT_INT = 2; { !signed integer data }
  220. SAMPLEFORMAT_IEEEFP = 3; { !IEEE floating point data }
  221. SAMPLEFORMAT_VOID = 4; { !untyped data }
  222. SAMPLEFORMAT_COMPLEXINT = 5; { !complex signed int }
  223. SAMPLEFORMAT_COMPLEXIEEEFP = 6; { !complex ieee floating }
  224. TIFFTAG_SMINSAMPLEVALUE = 340; { !variable MinSampleValue }
  225. TIFFTAG_SMAXSAMPLEVALUE = 341; { !variable MaxSampleValue }
  226. TIFFTAG_CLIPPATH = 343; { %ClipPath [Adobe TIFF technote 2] }
  227. TIFFTAG_XCLIPPATHUNITS = 344; { %XClipPathUnits [Adobe TIFF technote 2] }
  228. TIFFTAG_YCLIPPATHUNITS = 345; { %YClipPathUnits [Adobe TIFF technote 2] }
  229. TIFFTAG_INDEXED = 346; { %Indexed [Adobe TIFF Technote 3] }
  230. TIFFTAG_JPEGTABLES = 347; { %JPEG table stream }
  231. TIFFTAG_OPIPROXY = 351; { %OPI Proxy [Adobe TIFF technote] }
  232. { Tags 512-521 are obsoleted by Technical Note #2
  233. which specifies a revised JPEG-in-TIFF scheme. }
  234. TIFFTAG_JPEGPROC = 512; { !JPEG processing algorithm }
  235. JPEGPROC_BASELINE = 1; { !baseline sequential }
  236. JPEGPROC_LOSSLESS = 14; { !Huffman coded lossless }
  237. TIFFTAG_JPEGIFOFFSET = 513; { !pointer to SOI marker }
  238. TIFFTAG_JPEGIFBYTECOUNT = 514; { !JFIF stream length }
  239. TIFFTAG_JPEGRESTARTINTERVAL = 515; { !restart interval length }
  240. TIFFTAG_JPEGLOSSLESSPREDICTORS = 517; { !lossless proc predictor }
  241. TIFFTAG_JPEGPOINTTRANSFORM = 518; { !lossless point transform }
  242. TIFFTAG_JPEGQTABLES = 519; { !Q matrice offsets }
  243. TIFFTAG_JPEGDCTABLES = 520; { !DCT table offsets }
  244. TIFFTAG_JPEGACTABLES = 521; { !AC coefficient offsets }
  245. TIFFTAG_YCBCRCOEFFICIENTS = 529; { !RGB -> YCbCr transform }
  246. TIFFTAG_YCBCRSUBSAMPLING = 530; { !YCbCr subsampling factors }
  247. TIFFTAG_YCBCRPOSITIONING = 531; { !subsample positioning }
  248. YCBCRPOSITION_CENTERED = 1; { !as in PostScript Level 2 }
  249. YCBCRPOSITION_COSITED = 2; { !as in CCIR 601-1 }
  250. TIFFTAG_REFERENCEBLACKWHITE = 532; { !colorimetry info }
  251. TIFFTAG_XMLPACKET = 700; { %XML packet [Adobe XMP technote 9-14-02] ([email protected]) }
  252. TIFFTAG_OPIIMAGEID = 32781; { %OPI ImageID [Adobe TIFF technote] }
  253. { tags 32952-32956 are private tags registered to Island Graphics }
  254. TIFFTAG_REFPTS = 32953; { image reference points }
  255. TIFFTAG_REGIONTACKPOINT = 32954; { region-xform tack point }
  256. TIFFTAG_REGIONWARPCORNERS = 32955; { warp quadrilateral }
  257. TIFFTAG_REGIONAFFINE = 32956; { affine transformation mat }
  258. { tags 32995-32999 are private tags registered to SGI }
  259. TIFFTAG_MATTEING = 32995; { $use ExtraSamples }
  260. TIFFTAG_DATATYPE = 32996; { $use SampleFormat }
  261. TIFFTAG_IMAGEDEPTH = 32997; { z depth of image }
  262. TIFFTAG_TILEDEPTH = 32998; { z depth/data tile }
  263. { tags 33300-33309 are private tags registered to Pixar }
  264. { TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH are set when an image has been cropped out of a larger image.
  265. They reflect the size of the original uncropped image. The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used to determine the
  266. position of the smaller image in the larger one. }
  267. TIFFTAG_PIXAR_IMAGEFULLWIDTH = 33300; { full image size in x }
  268. TIFFTAG_PIXAR_IMAGEFULLLENGTH = 33301; { full image size in y }
  269. { Tags 33302-33306 are used to identify special image modes and data used by Pixar's texture formats. }
  270. TIFFTAG_PIXAR_TEXTUREFORMAT = 33302; { texture map format }
  271. TIFFTAG_PIXAR_WRAPMODES = 33303; { s & t wrap modes }
  272. TIFFTAG_PIXAR_FOVCOT = 33304; { cotan(fov) for env. maps }
  273. TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN = 33305;
  274. TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA = 33306;
  275. { tag 33405 is a private tag registered to Eastman Kodak }
  276. TIFFTAG_WRITERSERIALNUMBER = 33405; { device serial number }
  277. { tag 33432 is listed in the 6.0 spec w/ unknown ownership }
  278. TIFFTAG_COPYRIGHT = 33432; { copyright string }
  279. { IPTC TAG from RichTIFF specifications }
  280. TIFFTAG_RICHTIFFIPTC = 33723;
  281. { 34016-34029 are reserved for ANSI IT8 TIFF/IT <[email protected]) }
  282. TIFFTAG_IT8SITE = 34016; { site name }
  283. TIFFTAG_IT8COLORSEQUENCE = 34017; { color seq. [RGB,CMYK,etc] }
  284. TIFFTAG_IT8HEADER = 34018; { DDES Header }
  285. TIFFTAG_IT8RASTERPADDING = 34019; { raster scanline padding }
  286. TIFFTAG_IT8BITSPERRUNLENGTH = 34020; { # of bits in short run }
  287. TIFFTAG_IT8BITSPEREXTENDEDRUNLENGTH = 34021; { # of bits in long run }
  288. TIFFTAG_IT8COLORTABLE = 34022; { LW colortable }
  289. TIFFTAG_IT8IMAGECOLORINDICATOR = 34023; { BP/BL image color switch }
  290. TIFFTAG_IT8BKGCOLORINDICATOR = 34024; { BP/BL bg color switch }
  291. TIFFTAG_IT8IMAGECOLORVALUE = 34025; { BP/BL image color value }
  292. TIFFTAG_IT8BKGCOLORVALUE = 34026; { BP/BL bg color value }
  293. TIFFTAG_IT8PIXELINTENSITYRANGE = 34027; { MP pixel intensity value }
  294. TIFFTAG_IT8TRANSPARENCYINDICATOR = 34028; { HC transparency switch }
  295. TIFFTAG_IT8COLORCHARACTERIZATION = 34029; { color character. table }
  296. TIFFTAG_IT8HCUSAGE = 34030; { HC usage indicator }
  297. TIFFTAG_IT8TRAPINDICATOR = 34031; { Trapping indicator (untrapped=0, trapped=1) }
  298. TIFFTAG_IT8CMYKEQUIVALENT = 34032; { CMYK color equivalents }
  299. { tags 34232-34236 are private tags registered to Texas Instruments }
  300. TIFFTAG_FRAMECOUNT = 34232; { Sequence Frame Count }
  301. { tag 34750 is a private tag registered to Adobe? }
  302. TIFFTAG_ICCPROFILE = 34675; { ICC profile data }
  303. { tag 34377 is private tag registered to Adobe for PhotoShop }
  304. TIFFTAG_PHOTOSHOP = 34377;
  305. { tag 34750 is a private tag registered to Pixel Magic }
  306. TIFFTAG_JBIGOPTIONS = 34750; { JBIG options }
  307. { tags 34908-34914 are private tags registered to SGI }
  308. TIFFTAG_FAXRECVPARAMS = 34908; { encoded Class 2 ses. parms }
  309. TIFFTAG_FAXSUBADDRESS = 34909; { received SubAddr string }
  310. TIFFTAG_FAXRECVTIME = 34910; { receive time (secs) }
  311. { tags 37439-37443 are registered to SGI <[email protected]> }
  312. TIFFTAG_STONITS = 37439; { Sample value to Nits }
  313. { tag 34929 is a private tag registered to FedEx }
  314. TIFFTAG_FEDEX_EDR = 34929; { unknown use }
  315. { tag 65535 is an undefined tag used by Eastman Kodak }
  316. TIFFTAG_DCSHUESHIFTVALUES = 65535; { hue shift correction data }
  317. { The following are ``pseudo tags'' that can be used to control codec-specific functionality. These tags are not written to file.
  318. Note that these values start at 0xffff+1 so that they'll never collide with Aldus-assigned tags. }
  319. TIFFTAG_FAXMODE = 65536; { Group 3/4 format control }
  320. FAXMODE_CLASSIC = $0; { default, include RTC }
  321. FAXMODE_NORTC = $1; { no RTC at end of data }
  322. FAXMODE_NOEOL = $2; { no EOL code at end of row }
  323. FAXMODE_BYTEALIGN = $4; { byte align row }
  324. FAXMODE_WORDALIGN = $8; { word align row }
  325. FAXMODE_CLASSF = FAXMODE_NORTC; { TIFF Class F }
  326. TIFFTAG_JPEGQUALITY = 65537; { Compression quality level }
  327. { Note: quality level is on the IJG 0-100 scale. Default value is 75 }
  328. TIFFTAG_JPEGCOLORMODE = 65538; { Auto RGB<=>YCbCr convert? }
  329. JPEGCOLORMODE_RAW = $0; { no conversion (default) }
  330. JPEGCOLORMODE_RGB = $1; { do auto conversion }
  331. TIFFTAG_JPEGTABLESMODE = 65539; { What to put in JPEGTables }
  332. JPEGTABLESMODE_QUANT = $1; { include quantization tbls }
  333. JPEGTABLESMODE_HUFF = $2; { include Huffman tbls }
  334. { Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF }
  335. TIFFTAG_FAXFILLFUNC = 65540; { G3/G4 fill function }
  336. TIFFTAG_PIXARLOGDATAFMT = 65549; { PixarLogCodec I/O data sz }
  337. PIXARLOGDATAFMT_8BIT = 0; { regular u_char samples }
  338. PIXARLOGDATAFMT_8BITABGR = 1; { ABGR-order u_chars }
  339. PIXARLOGDATAFMT_11BITLOG = 2; { 11-bit log-encoded (raw) }
  340. PIXARLOGDATAFMT_12BITPICIO = 3; { as per PICIO (1.0==2048) }
  341. PIXARLOGDATAFMT_16BIT = 4; { signed short samples }
  342. PIXARLOGDATAFMT_FLOAT = 5; { IEEE float samples }
  343. { 65550-65556 are allocated to Oceana Matrix <[email protected]> }
  344. TIFFTAG_DCSIMAGERTYPE = 65550; { imager model & filter }
  345. DCSIMAGERMODEL_M3 = 0; { M3 chip (1280 x 1024) }
  346. DCSIMAGERMODEL_M5 = 1; { M5 chip (1536 x 1024) }
  347. DCSIMAGERMODEL_M6 = 2; { M6 chip (3072 x 2048) }
  348. DCSIMAGERFILTER_IR = 0; { infrared filter }
  349. DCSIMAGERFILTER_MONO = 1; { monochrome filter }
  350. DCSIMAGERFILTER_CFA = 2; { color filter array }
  351. DCSIMAGERFILTER_OTHER = 3; { other filter }
  352. TIFFTAG_DCSINTERPMODE = 65551; { interpolation mode }
  353. DCSINTERPMODE_NORMAL = 0; { whole image, default }
  354. DCSINTERPMODE_PREVIEW = 1; { preview of image (384x256) }
  355. TIFFTAG_DCSBALANCEARRAY = 65552; { color balance values }
  356. TIFFTAG_DCSCORRECTMATRIX = 65553; { color correction values }
  357. TIFFTAG_DCSGAMMA = 65554; { gamma value }
  358. TIFFTAG_DCSTOESHOULDERPTS = 65555; { toe & shoulder points }
  359. TIFFTAG_DCSCALIBRATIONFD = 65556; { calibration file desc }
  360. { Note: quality level is on the ZLIB 1-9 scale. Default value is -1 }
  361. TIFFTAG_ZIPQUALITY = 65557; { compression quality level }
  362. TIFFTAG_PIXARLOGQUALITY = 65558; { PixarLog uses same scale }
  363. { 65559 is allocated to Oceana Matrix <[email protected]> }
  364. TIFFTAG_DCSCLIPRECTANGLE = 65559; { area of image to acquire }
  365. TIFFTAG_SGILOGDATAFMT = 65560; { SGILog user data format }
  366. SGILOGDATAFMT_FLOAT = 0; { IEEE float samples }
  367. SGILOGDATAFMT_16BIT = 1; { 16-bit samples }
  368. SGILOGDATAFMT_RAW = 2; { uninterpreted data }
  369. SGILOGDATAFMT_8BIT = 3; { 8-bit RGB monitor values }
  370. TIFFTAG_SGILOGENCODE = 65561; { SGILog data encoding control }
  371. SGILOGENCODE_NODITHER = 0; { do not dither encoded values }
  372. SGILOGENCODE_RANDITHER = 1; { randomly dither encd values }
  373. { Flags to pass to TIFFPrintDirectory to control printing of data structures that are potentially very large. Bit-or these flags to
  374. enable printing multiple items. }
  375. TIFFPRINT_NONE = $0; { no extra info }
  376. TIFFPRINT_STRIPS = $1; { strips/tiles info }
  377. TIFFPRINT_CURVES = $2; { color/gray response curves }
  378. TIFFPRINT_COLORMAP = $4; { colormap }
  379. TIFFPRINT_JPEGQTABLES = $100; { JPEG Q matrices }
  380. TIFFPRINT_JPEGACTABLES = $200; { JPEG AC tables }
  381. TIFFPRINT_JPEGDCTABLES = $200; { JPEG DC tables }
  382. TIFF_ANY = TIFF_NOTYPE; { for field descriptor searching }
  383. TIFF_VARIABLE = -1; { marker for variable length tags }
  384. TIFF_SPP = -2; { marker for SamplesPerPixel tags }
  385. TIFF_VARIABLE2 = -3; { marker for uint32 var-length tags }
  386. FIELD_CUSTOM = 65;
  387. {added for LibTiff 3.9.4 by Alex ([email protected]) Dec.2011}
  388. TIFFTAG_EXIFIFD = 34665; { pointer to the Exif IFD }
  389. EXIFTAG_FOCALLENGTH = 37386; { focal length }
  390. EXIFTAG_FOCALLENGTHIN35MMFILM = 41989; { indicates the equivalent focal length assuming a 35mm film camera, in mm }
  391. EXIFTAG_EXIFVERSION = 36864; { version of exif format }
  392. EXIFTAG_DATETIMEDIGITIZED = 36868; { date and time when the image was stored as digital data }
  393. EXIFTAG_DATETIMEORIGINAL = 36867; { date and time when the original image data was generated }
  394. EXIFTAG_EXPOSURETIME = 33434; { exposure time, given in seconds }
  395. EXIFTAG_FNUMBER = 33437; { F number }
  396. EXIFTAG_EXPOSUREPROGRAM = 34850; { class of the program used by the camera to set exposure }
  397. EXIFTAG_SPECTRALSENSITIVITY = 34852; { spectral sensitivity of each channel of the camera used }
  398. EXIFTAG_ISOSPEEDRATINGS = 34855; { ISO Speed and ISO Latitude }
  399. EXIFTAG_OECF = 34856; { Opto-Electric Conversion Function }
  400. EXIFTAG_COMPONENTSCONFIGURATION = 37121; { meaning of each component }
  401. EXIFTAG_COMPRESSEDBITSPERPIXEL = 37122; { compression mode }
  402. EXIFTAG_SHUTTERSPEEDVALUE = 37377; { shutter speed }
  403. EXIFTAG_APERTUREVALUE = 37378; { lens aperture }
  404. EXIFTAG_BRIGHTNESSVALUE = 37379; { brightness }
  405. EXIFTAG_EXPOSUREBIASVALUE = 37380; { exposure bias }
  406. EXIFTAG_MAXAPERTUREVALUE = 37381; { maximum lens aperture }
  407. EXIFTAG_SUBJECTDISTANCE = 37382; { distance to the subject in meters }
  408. EXIFTAG_METERINGMODE = 37383; { metering mode }
  409. EXIFTAG_LIGHTSOURCE = 37384; { light source }
  410. EXIFTAG_FLASH = 37385; { flash }
  411. EXIFTAG_SUBJECTAREA = 37396; { subject area (in exif ver.2.2) }
  412. EXIFTAG_MAKERNOTE = 37500; { manufacturer notes }
  413. EXIFTAG_USERCOMMENT = 37510; { user comments }
  414. EXIFTAG_SUBSECTIME = 37520; { DateTime subseconds }
  415. EXIFTAG_SUBSECTIMEORIGINAL = 37521; { DateTimeOriginal subseconds }
  416. EXIFTAG_SUBSECTIMEDIGITIZED = 37522; { DateTimeDigitized subseconds }
  417. EXIFTAG_FLASHPIXVERSION = 40960; { FlashPix format version }
  418. EXIFTAG_COLORSPACE = 40961; { color space information }
  419. EXIFTAG_PIXELXDIMENSION = 40962; { valid image width }
  420. EXIFTAG_PIXELYDIMENSION = 40963; { valid image height }
  421. EXIFTAG_RELATEDSOUNDFILE = 40964; { related audio file }
  422. EXIFTAG_FLASHENERGY = 41483; { flash energy }
  423. EXIFTAG_SPATIALFREQUENCYRESPONSE = 41484; { spatial frequency response }
  424. EXIFTAG_FOCALPLANEXRESOLUTION = 41486; { focal plane X resolution }
  425. EXIFTAG_FOCALPLANEYRESOLUTION = 41487; { focal plane Y resolution }
  426. EXIFTAG_FOCALPLANERESOLUTIONUNIT = 41488; { focal plane resolution unit }
  427. EXIFTAG_SUBJECTLOCATION = 41492; { subject location }
  428. EXIFTAG_EXPOSUREINDEX = 41493; { exposure index }
  429. EXIFTAG_SENSINGMETHOD = 41495; { sensing method }
  430. EXIFTAG_FILESOURCE = 41728; { file source }
  431. EXIFTAG_SCENETYPE = 41729; { scene type }
  432. EXIFTAG_CFAPATTERN = 41730; { CFA pattern }
  433. EXIFTAG_CUSTOMRENDERED = 41985; { custom image processing (in exif ver.2.2) }
  434. EXIFTAG_EXPOSUREMODE = 41986; { exposure mode (in exif ver.2.2) }
  435. EXIFTAG_WHITEBALANCE = 41987; { white balance (in exif ver.2.2) }
  436. EXIFTAG_DIGITALZOOMRATIO = 41988; { digital zoom ratio (in exif ver.2.2) }
  437. EXIFTAG_SCENECAPTURETYPE = 41990; { scene capture type (in exif ver.2.2) }
  438. EXIFTAG_GAINCONTROL = 41991; { gain control (in exif ver.2.2) }
  439. EXIFTAG_CONTRAST = 41992; { contrast (in exif ver.2.2) }
  440. EXIFTAG_SATURATION = 41993; { saturation (in exif ver.2.2) }
  441. EXIFTAG_SHARPNESS = 41994; { sharpness (in exif ver.2.2) }
  442. EXIFTAG_DEVICESETTINGDESCRIPTION = 41995; { device settings description (in exif ver.2.2) }
  443. EXIFTAG_SUBJECTDISTANCERANGE = 41996; { subject distance range (in exif ver.2.2) }
  444. EXIFTAG_IMAGEUNIQUEID = 42016; { Unique image ID (in exif ver.2.2) }
  445. type
  446. PTIFF = Pointer;
  447. PTIFFRGBAImage = Pointer;
  448. TIFFReadWriteProc = function(fd: thandle_t; buf: tdata_t; size: tsize_t): tsize_t; cdecl;
  449. TIFFSeekProc = function(fd: thandle_t; off: toff_t; whence: Integer): toff_t; cdecl;
  450. TIFFCloseProc = function(fd: thandle_t): Integer; cdecl;
  451. TIFFSizeProc = function(fd: thandle_t): toff_t; cdecl;
  452. TIFFMapFileProc = function(fd: thandle_t; var pbase: tdata_t; var psize: toff_t): Integer; cdecl;
  453. TIFFUnmapFileProc = procedure(fd: thandle_t; base: tdata_t; size: toff_t); cdecl;
  454. TIFFExtendProc = procedure(Handle: PTIFF); cdecl;
  455. TIFFErrorHandler = procedure(Module: PAnsiChar; const Format: PAnsiChar; Params: va_list); cdecl;
  456. TIFFInitMethod = function(Handle: PTIFF; Scheme: Integer): Integer; cdecl;
  457. PTIFFCodec = ^TIFFCodec;
  458. TIFFCodec = record
  459. Name: PAnsiChar;
  460. Scheme: Word;
  461. Init: TIFFInitMethod;
  462. end;
  463. PTIFFFieldInfo = ^TIFFFieldInfo;
  464. TIFFFieldInfo = record
  465. FieldTag: Cardinal; { field's tag }
  466. FieldReadCount: Smallint; { read count/TIFF_VARIABLE/TIFF_SPP }
  467. FieldWriteCount: Smallint; { write count/TIFF_VARIABLE }
  468. FieldType: Integer; { type of associated data }
  469. FieldBit: Word; { bit in fieldsset bit vector }
  470. FieldOkToChange: Byte; { if true, can change while writing }
  471. FieldPassCount: Byte; { if true, pass dir count on set }
  472. FieldName: PAnsiChar; { ASCII name }
  473. end;
  474. PTIFFTagValue = ^TIFFTagValue;
  475. TIFFTagValue = record
  476. Info: PTIFFFieldInfo;
  477. Count: Integer;
  478. Value: Pointer;
  479. end;
  480. {$IFDEF DYNAMIC_DLL_LOADING}
  481. var
  482. TIFFGetVersion: function(): PAnsiChar; cdecl;
  483. TIFFOpen: function (const FileName: PAnsiChar; const Mode: PAnsiChar): PTIFF; cdecl;
  484. TIFFClientOpen: function(
  485. const Name: PAnsiChar;
  486. const Mode: PAnsiChar;
  487. ClientData: Cardinal;
  488. ReadProc: TIFFReadWriteProc;
  489. WriteProc: TIFFReadWriteProc;
  490. SeekProc: TIFFSeekProc;
  491. CloseProc: TIFFCloseProc;
  492. SizeProc: TIFFSizeProc;
  493. MapProc: TIFFMapFileProc;
  494. UnmapProc: TIFFUnmapFileProc): PTIFF; cdecl;
  495. TIFFClose: procedure(Handle: PTIFF); cdecl;
  496. TIFFSetFileno: function(Handle: PTIFF; Newvalue: Integer): Integer; cdecl;
  497. TIFFSetField: function(Handle: PTIFF; Tag: Cardinal): Integer; cdecl varargs;
  498. TIFFGetField: function(Handle: PTIFF; Tag: Cardinal): Integer; cdecl varargs;
  499. TIFFGetFieldDefaulted: function(Handle: PTIFF; Tag: Cardinal): Integer; cdecl varargs;
  500. TIFFReadRGBAImageOriented: function(Handle: PTIFF; RWidth,RHeight: Cardinal; Raster: Pointer; Orientation: Integer; Stop: Integer): Integer; cdecl;
  501. TIFFReadScanline: function(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: tsample_t): Integer; cdecl;
  502. TIFFWriteScanline: function(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: tsample_t): Integer; cdecl;
  503. TIFFScanlineSize: function(Handle: PTIFF): tmsize_t; cdecl;
  504. TIFFDefaultStripSize: function(Handle: PTIFF; Request: Cardinal): Cardinal; cdecl;
  505. TIFFNumberOfDirectories: function(Handle: PTIFF): Word; cdecl;
  506. TIFFSetDirectory: function(Handle: PTIFF; Dirn: Word): Integer; cdecl;
  507. TIFFWriteDirectory: function(Handle: PTIFF): Integer; cdecl;
  508. TIFFReadEXIFDirectory: function(Handle: PTIFF; Diroff: toff_t): Integer; cdecl;
  509. TIFFSetErrorHandler: function(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl;
  510. TIFFSetWarningHandler: function(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl;
  511. function LoadTiffLibrary: Boolean;
  512. {$ELSE}
  513. function TIFFGetVersion: PAnsiChar; cdecl; external SLibName;
  514. function TIFFFindCODEC(Scheme: Word): PTIFFCodec; cdecl; external SLibName;
  515. function TIFFRegisterCODEC(Scheme: Word; Name: PAnsiChar; InitMethod: TIFFInitMethod): PTIFFCodec; cdecl; external SLibName;
  516. procedure TIFFUnRegisterCODEC(c: PTIFFCodec); cdecl; external SLibName;
  517. function TIFFIsCODECConfigured(Scheme: Word): Integer; cdecl; external SLibName;
  518. function TIFFGetConfiguredCODECs: PTIFFCodec; cdecl; external SLibName;
  519. function TIFFClientOpen(Name: PAnsiChar; Mode: PAnsiChar; ClientData: THandle;
  520. ReadProc: TIFFReadWriteProc;
  521. WriteProc: TIFFReadWriteProc;
  522. SeekProc: TIFFSeekProc;
  523. CloseProc: TIFFCloseProc;
  524. SizeProc: TIFFSizeProc;
  525. MapProc: TIFFMapFileProc;
  526. UnmapProc: TIFFUnmapFileProc): PTIFF; cdecl; external SLibName;
  527. procedure TIFFCleanup(Handle: PTIFF); cdecl; external SLibName;
  528. procedure TIFFClose(Handle: PTIFF); cdecl; external SLibName;
  529. function TIFFFileno(Handle: PTIFF): Integer; cdecl; external SLibName;
  530. function TIFFSetFileno(Handle: PTIFF; Newvalue: Integer): Integer; cdecl; external SLibName;
  531. function TIFFClientdata(Handle: PTIFF): THandle; cdecl; external SLibName;
  532. function TIFFSetClientdata(Handle: PTIFF; Newvalue: THandle): THandle; cdecl; external SLibName;
  533. function TIFFGetMode(Handle: PTIFF): Integer; cdecl; external SLibName;
  534. function TIFFSetMode(Handle: PTIFF; Mode: Integer): Integer; cdecl; external SLibName;
  535. function TIFFFileName(Handle: PTIFF): Pointer; cdecl; external SLibName;
  536. function TIFFSetFileName(Handle: PTIFF; Name: PAnsiChar): PAnsiChar; cdecl; external SLibName;
  537. function TIFFGetReadProc(Handle: PTIFF): TIFFReadWriteProc; cdecl; external SLibName;
  538. function TIFFGetWriteProc(Handle: PTIFF): TIFFReadWriteProc; cdecl; external SLibName;
  539. function TIFFGetSeekProc(Handle: PTIFF): TIFFSeekProc; cdecl; external SLibName;
  540. function TIFFGetCloseProc(Handle: PTIFF): TIFFCloseProc; cdecl; external SLibName;
  541. function TIFFGetSizeProc(Handle: PTIFF): TIFFSizeProc; cdecl; external SLibName;
  542. procedure TIFFError(Module: Pointer; Fmt: Pointer); cdecl; external SLibName; varargs;
  543. function TIFFSetErrorHandler(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl; external SLibName;
  544. procedure TIFFWarning(Module: Pointer; Fmt: Pointer); cdecl; external SLibName; varargs;
  545. function TIFFSetWarningHandler(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl; external SLibName;
  546. function TIFFSetTagExtender(Extender: TIFFExtendProc): TIFFExtendProc; cdecl; external SLibName;
  547. function TIFFFlush(Handle: PTIFF): Integer; cdecl; external SLibName;
  548. function TIFFFlushData(Handle: PTIFF): Integer; cdecl; external SLibName;
  549. function TIFFReadEXIFDirectory(Handle: PTIFF; Diroff: toff_t): Integer; cdecl; external SLibName;
  550. function TIFFReadDirectory(Handle: PTIFF): Integer; cdecl; external SLibName;
  551. function TIFFCurrentDirectory(Handle: PTIFF): Word; cdecl; external SLibName;
  552. function TIFFCurrentDirOffset(Handle: PTIFF): toff_t; cdecl; external SLibName;
  553. function TIFFLastDirectory(Handle: PTIFF): Integer; cdecl; external SLibName;
  554. function TIFFNumberOfDirectories(Handle: PTIFF): Word; cdecl; external SLibName;
  555. function TIFFSetDirectory(Handle: PTIFF; Dirn: Word): Integer; cdecl; external SLibName;
  556. function TIFFSetSubDirectory(Handle: PTIFF; Diroff: toff_t): Integer; cdecl; external SLibName;
  557. function TIFFCreateDirectory(Handle: PTIFF): Integer; cdecl; external SLibName;
  558. function TIFFWriteDirectory(Handle: PTIFF): Integer; cdecl; external SLibName;
  559. function TIFFUnlinkDirectory(handle: PTIFF; Dirn: Word): Integer; cdecl; external SLibName;
  560. procedure TIFFPrintDirectory(Handle: PTIFF; Fd: Pointer; Flags: Integer); cdecl; external SLibName;
  561. function TIFFGetField(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external SLibName; varargs;
  562. function TIFFGetFieldDefaulted(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external SLibName; varargs;
  563. function TIFFVGetField(Handle: PTIFF; Tag: Cardinal; Ap: Pointer): Integer; cdecl; external SLibName;
  564. function TIFFSetField(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external SLibName; varargs;
  565. function TIFFVSetField(Handle: PTIFF; Tag: Cardinal; Ap: Pointer): Integer; cdecl; external SLibName;
  566. function TIFFIsBigEndian(Handle: PTIFF): Integer; cdecl; external SLibName;
  567. function TIFFIsTiled(Handle: PTIFF): Integer; cdecl; external SLibName;
  568. function TIFFIsByteSwapped(Handle: PTIFF): Integer; cdecl; external SLibName;
  569. function TIFFIsUpSampled(Handle: PTIFF): Integer; cdecl; external SLibName;
  570. function TIFFIsMSB2LSB(Handle: PTIFF): Integer; cdecl; external SLibName;
  571. function TIFFGetTagListCount(Handle: PTIFF): Integer; cdecl; external SLibName;
  572. function TIFFGetTagListEntry(Handle: PTIFF; TagIndex: Integer): Cardinal; cdecl; external SLibName;
  573. procedure TIFFMergeFieldInfo(Handle: PTIFF; Info: PTIFFFieldInfo; N: Integer); cdecl; external SLibName;
  574. function TIFFFindFieldInfo(Handle: PTIFF; Tag: Cardinal; Dt: Integer): PTIFFFieldInfo; cdecl; external SLibName;
  575. function TIFFFindFieldInfoByName(Handle: PTIFF; FIeldName: PAnsiChar; Dt: Integer): PTIFFFieldInfo; cdecl; external SLibName;
  576. function TIFFFieldWithTag(Handle: PTIFF; Tag: Cardinal): PTIFFFieldInfo; cdecl; external SLibName;
  577. function TIFFFieldWithName(Handle: PTIFF; FieldName: PAnsiChar): PTIFFFieldInfo; cdecl; external SLibName;
  578. function TIFFDataWidth(DataType: Integer): Integer; cdecl; external SLibName;
  579. function TIFFReadRGBAImage(Handle: PTIFF; RWidth,RHeight: Cardinal; Raster: Pointer; Stop: Integer): Integer; cdecl; external SLibName;
  580. function TIFFReadRGBAImageOriented(Handle: PTIFF; RWidth,RHeight: Cardinal; Raster: Pointer; Orientation: Integer; Stop: Integer): Integer; cdecl; external SLibName;
  581. function TIFFReadRGBAStrip(Handle: PTIFF; Row: Cardinal; Raster: Pointer): Integer; cdecl; external SLibName;
  582. function TIFFReadRGBATile(Handle: PTIFF; Col,Row: Cardinal; Raster: Pointer): Integer; cdecl; external SLibName;
  583. function TIFFRGBAImageOk(Handle: PTIFF; Emsg: PAnsiChar): Integer; cdecl; external SLibName;
  584. function TIFFRGBAImageBegin(Img: PTIFFRGBAImage; Handle: PTIFF; Stop: Integer; Emsg: PAnsiChar): Integer; cdecl; external SLibName;
  585. function TIFFRGBAImageGet(Img: PTIFFRGBAImage; Raster: Pointer; W, H: Cardinal): Integer; cdecl; external SLibName;
  586. procedure TIFFRGBAImageEnd(Img: PTIFFRGBAImage); cdecl; external SLibName;
  587. function TIFFCurrentRow(Handle: PTIFF): Cardinal; cdecl; external SLibName;
  588. function TIFFStripSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
  589. function TIFFRawStripSize(Handle: PTIFF; Strip: Cardinal): tmsize_t; cdecl; external SLibName;
  590. function TIFFVStripSize(Handle: PTIFF; NRows: Cardinal): tmsize_t; cdecl; external SLibName;
  591. function TIFFDefaultStripSize(Handle: PTIFF; Request: Cardinal): Cardinal; cdecl; external SLibName;
  592. function TIFFNumberOfStrips(Handle: PTIFF): Cardinal; cdecl; external SLibName;
  593. function TIFFComputeStrip(Handle: PTIFF; Row: Cardinal; Sample: Word): Cardinal; cdecl; external SLibName;
  594. function TIFFReadRawStrip(Handle: PTIFF; Strip: Cardinal; Buf: Pointer; Size: tmsize_t): tmsize_t; cdecl; external SLibName;
  595. function TIFFReadEncodedStrip(Handle: PTIFF; Strip: Cardinal; Buf: Pointer; Size: tmsize_t): tmsize_t; cdecl; external SLibName;
  596. function TIFFWriteRawStrip(Handle: PTIFF; Strip: Cardinal; Data: Pointer; Cc: tmsize_t): tmsize_t; cdecl; external SLibName;
  597. function TIFFWriteEncodedStrip(Handle: PTIFF; Strip: Cardinal; Data: Pointer; Cc: tmsize_t): tmsize_t; cdecl; external SLibName;
  598. function TIFFCurrentStrip(Handle: PTIFF): Cardinal; cdecl; external SLibName;
  599. function TIFFTileSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
  600. function TIFFTileRowSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
  601. function TIFFVTileSize(Handle: PTIFF; NRows: Cardinal): tmsize_t; cdecl; external SLibName;
  602. procedure TIFFDefaultTileSize(Handle: PTIFF; Tw: PCardinal; Th: PCardinal); cdecl; external SLibName;
  603. function TIFFNumberOfTiles(Handle: PTIFF): Cardinal; cdecl; external SLibName;
  604. function TIFFComputeTile(Handle: PTIFF; X,Y,Z: Cardinal; S: Word): Cardinal; cdecl; external SLibName;
  605. function TIFFReadRawTile(Handle: PTIFF; Tile: Cardinal; Buf: Pointer; Size: tmsize_t): tmsize_t; cdecl; external SLibName;
  606. function TIFFReadEncodedTile(Handle: PTIFF; Tile: Cardinal; Buf: Pointer; Size: tmsize_t): tmsize_t; cdecl; external SLibName;
  607. function TIFFWriteRawTile(Handle: PTIFF; Tile: Cardinal; Data: Pointer; Cc: tmsize_t): tmsize_t; cdecl; external SLibName;
  608. function TIFFWriteEncodedTile(Handle: PTIFF; Tile: Cardinal; Data: Pointer; Cc: tmsize_t): tmsize_t; cdecl; external SLibName;
  609. function TIFFCurrentTile(Handle: PTIFF): Cardinal; cdecl; external SLibName;
  610. function TIFFScanlineSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
  611. function TIFFScanlineSize64(Handle: PTIFF): Int64; cdecl; external SLibName;
  612. function TIFFRasterScanlineSize64(Handle: PTIFF): Int64; cdecl; external SLibName;
  613. function TIFFRasterScanlineSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
  614. function TIFFReadScanline(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: tsample_t): Integer; cdecl; external SLibName;
  615. function TIFFWriteScanline(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: tsample_t): Integer; cdecl; external SLibName;
  616. procedure TIFFSetWriteOffset(Handle: PTIFF; Off: toff_t); cdecl; external SLibName;
  617. procedure TIFFSwabShort(Wp: PWord); cdecl; external SLibName;
  618. procedure TIFFSwabLong(Lp: PCardinal); cdecl; external SLibName;
  619. procedure TIFFSwabDouble(Dp: PDouble); cdecl; external SLibName;
  620. procedure TIFFSwabArrayOfShort(Wp: PWord; N: tmsize_t); cdecl; external SLibName;
  621. procedure TIFFSwabArrayOfTriples(tp:PByte; n: tmsize_t); cdecl; external SLibName;
  622. procedure TIFFSwabArrayOfLong(Lp: PCardinal; N: tmsize_t); cdecl; external SLibName;
  623. procedure TIFFSwabArrayOfDouble(Dp: PDouble; N: tmsize_t); cdecl; external SLibName;
  624. procedure TIFFReverseBits(Cp: Pointer; N: tmsize_t); cdecl; external SLibName;
  625. function TIFFGetBitRevTable(Reversed: Integer): Pointer; cdecl; external SLibName;
  626. {$ENDIF}
  627. type
  628. TUserTiffErrorHandler = procedure(const Module, Message: AnsiString);
  629. procedure SetUserMessageHandlers(ErrorHandler, WarningHandler: TUserTiffErrorHandler);
  630. function IsVersion4: Boolean;
  631. implementation
  632. {$IFDEF FPC}
  633. uses
  634. dynlibs;
  635. {$ENDIF}
  636. var
  637. UserTiffWarningHandler: TUserTiffErrorHandler;
  638. UserTiffErrorHandler: TUserTiffErrorHandler;
  639. procedure SetUserMessageHandlers(ErrorHandler, WarningHandler: TUserTiffErrorHandler);
  640. begin
  641. UserTiffErrorHandler := ErrorHandler;
  642. UserTiffWarningHandler := WarningHandler;
  643. end;
  644. procedure SetInternalMessageHandlers(ErrorHandler, WarningHandler: TIFFErrorHandler);
  645. begin
  646. TIFFSetWarningHandler(@WarningHandler);
  647. TIFFSetErrorHandler(@ErrorHandler);
  648. end;
  649. const
  650. {$IFDEF MSWINDOWS}
  651. SRuntimeLib = 'msvcrt.dll';
  652. {$ELSE}
  653. SRuntimeLib = 'libc.so';
  654. {$ENDIF}
  655. function snprintf(S: PAnsiChar; N: Integer; const Format: PAnsiChar): Integer; cdecl; varargs; external SRuntimeLib name {$IFDEF MSWINDOWS}'_snprintf'{$ELSE}'snprintf'{$ENDIF};
  656. procedure FormatAndCallHandler(Handler: TUserTiffErrorHandler; Module: PAnsiChar; Format: PAnsiChar; Params: va_list);
  657. var
  658. Len: Integer;
  659. Buffer: array[0..511] of AnsiChar;
  660. Msg: AnsiString;
  661. begin
  662. Len := snprintf(@Buffer, 512, Format, Params);
  663. SetString(Msg, Buffer, Len);
  664. Handler(Module, Msg);
  665. end;
  666. procedure InternalTIFFWarning(Module: PAnsiChar; Format: PAnsiChar; Params: va_list); cdecl;
  667. begin
  668. if Assigned(UserTiffWarningHandler) then
  669. FormatAndCallHandler(UserTiffWarningHandler, Module, Format, Params);
  670. end;
  671. procedure InternallTIFFError(Module: PAnsiChar; Format: PAnsiChar; Params: va_list); cdecl;
  672. begin
  673. if Assigned(UserTiffErrorHandler) then
  674. FormatAndCallHandler(UserTiffErrorHandler, Module, Format, Params);
  675. end;
  676. function IsVersion4: Boolean;
  677. var
  678. Version: PAnsiChar;
  679. begin
  680. Version := TIFFGetVersion;
  681. Result := Pos(AnsiString('Version 4'), Version) > 0;
  682. end;
  683. procedure CheckVersion;
  684. begin
  685. {$IFDEF UNIX}
  686. if not IsVersion4 then
  687. WriteLn('Warning: installed libtiff seems to be version 3.x. TIFF functions will probably fail. Install libtiff5 package to get libtiff 4.x.');
  688. {$ENDIF}
  689. end;
  690. {$IFDEF DYNAMIC_DLL_LOADING}
  691. var
  692. TiffLibHandle: {$IFDEF FPC}TLibHandle{$ELSE}THandle{$ENDIF} = 0;
  693. function GetProcAddr(const AProcName: PAnsiChar): Pointer;
  694. begin
  695. Result := GetProcAddress(TiffLibHandle, AProcName);
  696. if Addr(Result) = nil then begin
  697. RaiseLastOSError;
  698. end;
  699. end;
  700. function LoadTiffLibrary: Boolean;
  701. begin
  702. Result := False;
  703. if TiffLibHandle = 0 then
  704. begin
  705. TiffLibHandle := LoadLibrary(SLibName);
  706. {$IF Defined(DARWIN)}
  707. if TiffLibHandle = 0 then
  708. TiffLibHandle := LoadLibrary('@executable_path/' + SLibName);
  709. {$IFEND}
  710. if TiffLibHandle <> 0 then
  711. begin
  712. TIFFGetVersion := GetProcAddr('TIFFGetVersion');
  713. TIFFOpen := GetProcAddr('TIFFOpen');
  714. TIFFClientOpen := GetProcAddr('TIFFClientOpen');
  715. TIFFClose := GetProcAddr('TIFFClose');
  716. TIFFSetFileno := GetProcAddr('TIFFSetFileno');
  717. TIFFSetField := GetProcAddr('TIFFSetField');
  718. TIFFGetField := GetProcAddr('TIFFGetField');
  719. TIFFGetFieldDefaulted := GetProcAddr('TIFFGetFieldDefaulted');
  720. TIFFReadRGBAImageOriented := GetProcAddr('TIFFReadRGBAImageOriented');
  721. TIFFReadScanline := GetProcAddr('TIFFReadScanline');
  722. TIFFWriteScanline := GetProcAddr('TIFFWriteScanline');
  723. TIFFScanlineSize := GetProcAddr('TIFFScanlineSize');
  724. TIFFDefaultStripSize := GetProcAddr('TIFFDefaultStripSize');
  725. TIFFNumberOfDirectories := GetProcAddr('TIFFNumberOfDirectories');
  726. TIFFSetDirectory := GetProcAddr('TIFFSetDirectory');
  727. TIFFWriteDirectory := GetProcAddr('TIFFWriteDirectory');
  728. TIFFReadEXIFDirectory := GetProcAddr('TIFFReadEXIFDirectory');
  729. TIFFSetErrorHandler := GetProcAddr('TIFFSetErrorHandler');
  730. TIFFSetWarningHandler := GetProcAddr('TIFFSetWarningHandler');
  731. SetInternalMessageHandlers(@InternallTIFFError, @InternalTIFFWarning);
  732. CheckVersion;
  733. Result := True;
  734. end;
  735. end;
  736. end;
  737. procedure FreeTiffLibrary;
  738. begin
  739. if TiffLibHandle <> 0 then begin
  740. FreeLibrary(TiffLibHandle);
  741. TiffLibHandle := 0;
  742. end;
  743. end;
  744. {$ENDIF}
  745. initialization
  746. {$IFNDEF DYNAMIC_DLL_LOADING}
  747. SetInternalMessageHandlers(@InternallTIFFError, @InternalTIFFWarning);
  748. CheckVersion;
  749. {$ENDIF}
  750. finalization
  751. {$IFDEF DYNAMIC_DLL_LOADING}
  752. FreeTiffLibrary;
  753. {$ENDIF}
  754. end.