Repo for the search and displace ingest module that takes odf, docx and pdf and transforms it into .md to be used with search and displace operations
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

803 lines
48 KiB

unit LibTiffDynLib;
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
// We prefer dynamic loading of the library (GetProcAddress/dlsym way)
// so that we don't get a crash with "libtiff not found!" message on startup
// if libtiff is not found in user's system.
{$DEFINE DYNAMIC_DLL_LOADING}
interface
uses
{$IFDEF MSWINDOWS}
Windows,
{$ENDIF}
SysUtils;
type
va_list = Pointer;
{$IFNDEF FPC}
{$IF CompilerVersion <= 18.5}
SizeInt = Integer;
{$ELSE}
SizeInt = NativeInt;
{$IFEND}
{$ENDIF}
type
tmsize_t = SizeInt;
tsize_t = SizeInt;
// typedef uint64 toff_t; /* file offset */
toff_t = Int64;
poff_t = ^toff_t;
tsample_t = Word;
// Beware: THandle is 32bit in size even on 64bit Linux - this may cause
// problems as pointers to client data are passed in thandle_t vars.
thandle_t = THandle;
tdata_t = Pointer;
ttag_t = LongWord;
tdir_t = Word;
tstrip_t = LongWord;
const
// LibTiff 4.0
{$IF Defined(MSWINDOWS)}
SLibName = 'libtiff.dll'; // make sure you have DLL with the same bitness as your app!
{$ELSEIF Defined(DARWIN)} // macOS
SLibName = 'libtiff.5.dylib';
{$ELSE} // Linux, BSD
SLibName = 'libtiff.so.5'; // yes, SONAME for libtiff v4.0 is actually libtiff5 (and libtiff.so.4 is libtiff v3.9)
{$IFEND}
TIFF_NOTYPE = 0;
TIFF_BYTE = 1; { 8-bit unsigned integer }
TIFF_ASCII = 2; { 8-bit bytes w/ last byte null }
TIFF_SHORT = 3; { 16-bit unsigned integer }
TIFF_LONG = 4; { 32-bit unsigned integer }
TIFF_RATIONAL = 5; { 64-bit unsigned fraction }
TIFF_SBYTE = 6; { !8-bit signed integer }
TIFF_UNDEFINED = 7; { !8-bit untyped data }
TIFF_SSHORT = 8; { !16-bit signed integer }
TIFF_SLONG = 9; { !32-bit signed integer }
TIFF_SRATIONAL = 10; { !64-bit signed fraction }
TIFF_FLOAT = 11; { !32-bit IEEE floating point }
TIFF_DOUBLE = 12; { !64-bit IEEE floating point }
TIFF_IFD = 13; { %32-bit unsigned integer (offset) }
TIFF_UNICODE = 14;
TIFF_COMPLEX = 15;
TIFF_LONG8 = 16;
TIFF_SLONG8 = 17;
TIFF_IFD8 = 18;
TIFFTAG_SUBFILETYPE = 254; { subfile data descriptor }
FILETYPE_REDUCEDIMAGE = $1; { reduced resolution version }
FILETYPE_PAGE = $2; { one page of many }
FILETYPE_MASK = $4; { transparency mask }
TIFFTAG_OSUBFILETYPE = 255; { kind of data in subfile }
OFILETYPE_IMAGE = 1; { full resolution image data }
OFILETYPE_REDUCEDIMAGE = 2; { reduced size image data }
OFILETYPE_PAGE = 3; { one page of many }
TIFFTAG_IMAGEWIDTH = 256; { image width in pixels }
TIFFTAG_IMAGELENGTH = 257; { image height in pixels }
TIFFTAG_BITSPERSAMPLE = 258; { bits per channel (sample) }
TIFFTAG_COMPRESSION = 259; { data compression technique }
COMPRESSION_NONE = 1; { dump mode }
COMPRESSION_CCITTRLE = 2; { CCITT modified Huffman RLE }
COMPRESSION_CCITTFAX3 = 3; { CCITT Group 3 fax encoding }
COMPRESSION_CCITT_T4 = 3; { CCITT T.4 (TIFF 6 name) }
COMPRESSION_CCITTFAX4 = 4; { CCITT Group 4 fax encoding }
COMPRESSION_CCITT_T6 = 4; { CCITT T.6 (TIFF 6 name) }
COMPRESSION_LZW = 5; { Lempel-Ziv & Welch }
COMPRESSION_OJPEG = 6; { !6.0 JPEG }
COMPRESSION_JPEG = 7; { %JPEG DCT compression }
COMPRESSION_NEXT = 32766; { NeXT 2-bit RLE }
COMPRESSION_CCITTRLEW = 32771; { #1 w/ word alignment }
COMPRESSION_PACKBITS = 32773; { Macintosh RLE }
COMPRESSION_THUNDERSCAN = 32809; { ThunderScan RLE }
{ codes 32895-32898 are reserved for ANSI IT8 TIFF/IT <dkelly@apago.com) }
COMPRESSION_IT8CTPAD = 32895; { IT8 CT w/padding }
COMPRESSION_IT8LW = 32896; { IT8 Linework RLE }
COMPRESSION_IT8MP = 32897; { IT8 Monochrome picture }
COMPRESSION_IT8BL = 32898; { IT8 Binary line art }
{ compression codes 32908-32911 are reserved for Pixar }
COMPRESSION_PIXARFILM = 32908; { Pixar companded 10bit LZW }
COMPRESSION_PIXARLOG = 32909; { Pixar companded 11bit ZIP }
COMPRESSION_DEFLATE = 32946; { Deflate compression }
COMPRESSION_ADOBE_DEFLATE = 8; { Deflate compression, as recognized by Adobe }
{ compression code 32947 is reserved for Oceana Matrix <dev@oceana.com> }
COMPRESSION_DCS = 32947; { Kodak DCS encoding }
COMPRESSION_JBIG = 34661; { ISO JBIG }
COMPRESSION_SGILOG = 34676; { SGI Log Luminance RLE }
COMPRESSION_SGILOG24 = 34677; { SGI Log 24-bit packed }
COMPRESSION_JP2000 = 34712; { Leadtools JPEG2000 }
TIFFTAG_PHOTOMETRIC = 262; { photometric interpretation }
PHOTOMETRIC_MINISWHITE = 0; { min value is white }
PHOTOMETRIC_MINISBLACK = 1; { min value is black }
PHOTOMETRIC_RGB = 2; { RGB color model }
PHOTOMETRIC_PALETTE = 3; { color map indexed }
PHOTOMETRIC_MASK = 4; { $holdout mask }
PHOTOMETRIC_SEPARATED = 5; { !color separations }
PHOTOMETRIC_YCBCR = 6; { !CCIR 601 }
PHOTOMETRIC_CIELAB = 8; { !1976 CIE L*a*b* }
PHOTOMETRIC_ICCLAB = 9; { ICC L*a*b* [Adobe TIFF Technote 4] }
PHOTOMETRIC_ITULAB = 10; { ITU L*a*b* }
PHOTOMETRIC_LOGL = 32844; { CIE Log2(L) }
PHOTOMETRIC_LOGLUV = 32845; { CIE Log2(L) (u',v') }
TIFFTAG_THRESHHOLDING = 263; { thresholding used on data }
THRESHHOLD_BILEVEL = 1; { b&w art scan }
THRESHHOLD_HALFTONE = 2; { or dithered scan }
THRESHHOLD_ERRORDIFFUSE = 3; { usually floyd-steinberg }
TIFFTAG_CELLWIDTH = 264; { +dithering matrix width }
TIFFTAG_CELLLENGTH = 265; { +dithering matrix height }
TIFFTAG_FILLORDER = 266; { data order within a byte }
FILLORDER_MSB2LSB = 1; { most significant -> least }
FILLORDER_LSB2MSB = 2; { least significant -> most }
TIFFTAG_DOCUMENTNAME = 269; { name of doc. image is from }
TIFFTAG_IMAGEDESCRIPTION = 270; { info about image }
TIFFTAG_MAKE = 271; { scanner manufacturer name }
TIFFTAG_MODEL = 272; { scanner model name/number }
TIFFTAG_STRIPOFFSETS = 273; { offsets to data strips }
TIFFTAG_ORIENTATION = 274; { +image orientation }
ORIENTATION_TOPLEFT = 1; { row 0 top, col 0 lhs }
ORIENTATION_TOPRIGHT = 2; { row 0 top, col 0 rhs }
ORIENTATION_BOTRIGHT = 3; { row 0 bottom, col 0 rhs }
ORIENTATION_BOTLEFT = 4; { row 0 bottom, col 0 lhs }
ORIENTATION_LEFTTOP = 5; { row 0 lhs, col 0 top }
ORIENTATION_RIGHTTOP = 6; { row 0 rhs, col 0 top }
ORIENTATION_RIGHTBOT = 7; { row 0 rhs, col 0 bottom }
ORIENTATION_LEFTBOT = 8; { row 0 lhs, col 0 bottom }
TIFFTAG_SAMPLESPERPIXEL = 277; { samples per pixel }
TIFFTAG_ROWSPERSTRIP = 278; { rows per strip of data }
TIFFTAG_STRIPBYTECOUNTS = 279; { bytes counts for strips }
TIFFTAG_MINSAMPLEVALUE = 280; { +minimum sample value }
TIFFTAG_MAXSAMPLEVALUE = 281; { +maximum sample value }
TIFFTAG_XRESOLUTION = 282; { pixels/resolution in x }
TIFFTAG_YRESOLUTION = 283; { pixels/resolution in y }
TIFFTAG_PLANARCONFIG = 284; { storage organization }
PLANARCONFIG_CONTIG = 1; { single image plane }
PLANARCONFIG_SEPARATE = 2; { separate planes of data }
TIFFTAG_PAGENAME = 285; { page name image is from }
TIFFTAG_XPOSITION = 286; { x page offset of image lhs }
TIFFTAG_YPOSITION = 287; { y page offset of image lhs }
TIFFTAG_FREEOFFSETS = 288; { +byte offset to free block }
TIFFTAG_FREEBYTECOUNTS = 289; { +sizes of free blocks }
{matched with tag reference up to this point}
TIFFTAG_GRAYRESPONSEUNIT = 290; { $gray scale curve accuracy }
GRAYRESPONSEUNIT_10S = 1; { tenths of a unit }
GRAYRESPONSEUNIT_100S = 2; { hundredths of a unit }
GRAYRESPONSEUNIT_1000S = 3; { thousandths of a unit }
GRAYRESPONSEUNIT_10000S = 4; { ten-thousandths of a unit }
GRAYRESPONSEUNIT_100000S = 5; { hundred-thousandths }
TIFFTAG_GRAYRESPONSECURVE = 291; { $gray scale response curve }
TIFFTAG_GROUP3OPTIONS = 292; { 32 flag bits }
TIFFTAG_T4OPTIONS = 292; { TIFF 6.0 proper name alias }
GROUP3OPT_2DENCODING = $1; { 2-dimensional coding }
GROUP3OPT_UNCOMPRESSED = $2; { data not compressed }
GROUP3OPT_FILLBITS = $4; { fill to byte boundary }
TIFFTAG_GROUP4OPTIONS = 293; { 32 flag bits }
TIFFTAG_T6OPTIONS = 293; { TIFF 6.0 proper name }
GROUP4OPT_UNCOMPRESSED = $2; { data not compressed }
TIFFTAG_RESOLUTIONUNIT = 296; { units of resolutions }
RESUNIT_NONE = 1; { no meaningful units }
RESUNIT_INCH = 2; { english }
RESUNIT_CENTIMETER = 3; { metric }
TIFFTAG_PAGENUMBER = 297; { page numbers of multi-page }
TIFFTAG_COLORRESPONSEUNIT = 300; { $color curve accuracy }
COLORRESPONSEUNIT_10S = 1; { tenths of a unit }
COLORRESPONSEUNIT_100S = 2; { hundredths of a unit }
COLORRESPONSEUNIT_1000S = 3; { thousandths of a unit }
COLORRESPONSEUNIT_10000S = 4; { ten-thousandths of a unit }
COLORRESPONSEUNIT_100000S = 5; { hundred-thousandths }
TIFFTAG_TRANSFERFUNCTION = 301; { !colorimetry info }
TIFFTAG_SOFTWARE = 305; { name & release }
TIFFTAG_DATETIME = 306; { creation date and time }
TIFFTAG_ARTIST = 315; { creator of image }
TIFFTAG_HOSTCOMPUTER = 316; { machine where created }
TIFFTAG_PREDICTOR = 317; { prediction scheme w/ LZW }
TIFFTAG_WHITEPOINT = 318; { image white point }
TIFFTAG_PRIMARYCHROMATICITIES = 319; { !primary chromaticities }
TIFFTAG_COLORMAP = 320; { RGB map for pallette image }
TIFFTAG_HALFTONEHINTS = 321; { !highlight+shadow info }
TIFFTAG_TILEWIDTH = 322; { !rows/data tile }
TIFFTAG_TILELENGTH = 323; { !cols/data tile }
TIFFTAG_TILEOFFSETS = 324; { !offsets to data tiles }
TIFFTAG_TILEBYTECOUNTS = 325; { !byte counts for tiles }
TIFFTAG_BADFAXLINES = 326; { lines w/ wrong pixel count }
TIFFTAG_CLEANFAXDATA = 327; { regenerated line info }
CLEANFAXDATA_CLEAN = 0; { no errors detected }
CLEANFAXDATA_REGENERATED = 1; { receiver regenerated lines }
CLEANFAXDATA_UNCLEAN = 2; { uncorrected errors exist }
TIFFTAG_CONSECUTIVEBADFAXLINES = 328; { max consecutive bad lines }
TIFFTAG_SUBIFD = 330; { subimage descriptors }
TIFFTAG_INKSET = 332; { !inks in separated image }
INKSET_CMYK = 1; { !cyan-magenta-yellow-black color }
INKSET_MULTIINK = 2; { !multi-ink or hi-fi color }
TIFFTAG_INKNAMES = 333; { !ascii names of inks }
TIFFTAG_NUMBEROFINKS = 334; { !number of inks }
TIFFTAG_DOTRANGE = 336; { !0% and 100% dot codes }
TIFFTAG_TARGETPRINTER = 337; { !separation target }
TIFFTAG_EXTRASAMPLES = 338; { !info about extra samples }
EXTRASAMPLE_UNSPECIFIED = 0; { !unspecified data }
EXTRASAMPLE_ASSOCALPHA = 1; { !associated alpha data }
EXTRASAMPLE_UNASSALPHA = 2; { !unassociated alpha data }
TIFFTAG_SAMPLEFORMAT = 339; { !data sample format }
SAMPLEFORMAT_UINT = 1; { !unsigned integer data }
SAMPLEFORMAT_INT = 2; { !signed integer data }
SAMPLEFORMAT_IEEEFP = 3; { !IEEE floating point data }
SAMPLEFORMAT_VOID = 4; { !untyped data }
SAMPLEFORMAT_COMPLEXINT = 5; { !complex signed int }
SAMPLEFORMAT_COMPLEXIEEEFP = 6; { !complex ieee floating }
TIFFTAG_SMINSAMPLEVALUE = 340; { !variable MinSampleValue }
TIFFTAG_SMAXSAMPLEVALUE = 341; { !variable MaxSampleValue }
TIFFTAG_CLIPPATH = 343; { %ClipPath [Adobe TIFF technote 2] }
TIFFTAG_XCLIPPATHUNITS = 344; { %XClipPathUnits [Adobe TIFF technote 2] }
TIFFTAG_YCLIPPATHUNITS = 345; { %YClipPathUnits [Adobe TIFF technote 2] }
TIFFTAG_INDEXED = 346; { %Indexed [Adobe TIFF Technote 3] }
TIFFTAG_JPEGTABLES = 347; { %JPEG table stream }
TIFFTAG_OPIPROXY = 351; { %OPI Proxy [Adobe TIFF technote] }
{ Tags 512-521 are obsoleted by Technical Note #2
which specifies a revised JPEG-in-TIFF scheme. }
TIFFTAG_JPEGPROC = 512; { !JPEG processing algorithm }
JPEGPROC_BASELINE = 1; { !baseline sequential }
JPEGPROC_LOSSLESS = 14; { !Huffman coded lossless }
TIFFTAG_JPEGIFOFFSET = 513; { !pointer to SOI marker }
TIFFTAG_JPEGIFBYTECOUNT = 514; { !JFIF stream length }
TIFFTAG_JPEGRESTARTINTERVAL = 515; { !restart interval length }
TIFFTAG_JPEGLOSSLESSPREDICTORS = 517; { !lossless proc predictor }
TIFFTAG_JPEGPOINTTRANSFORM = 518; { !lossless point transform }
TIFFTAG_JPEGQTABLES = 519; { !Q matrice offsets }
TIFFTAG_JPEGDCTABLES = 520; { !DCT table offsets }
TIFFTAG_JPEGACTABLES = 521; { !AC coefficient offsets }
TIFFTAG_YCBCRCOEFFICIENTS = 529; { !RGB -> YCbCr transform }
TIFFTAG_YCBCRSUBSAMPLING = 530; { !YCbCr subsampling factors }
TIFFTAG_YCBCRPOSITIONING = 531; { !subsample positioning }
YCBCRPOSITION_CENTERED = 1; { !as in PostScript Level 2 }
YCBCRPOSITION_COSITED = 2; { !as in CCIR 601-1 }
TIFFTAG_REFERENCEBLACKWHITE = 532; { !colorimetry info }
TIFFTAG_XMLPACKET = 700; { %XML packet [Adobe XMP technote 9-14-02] (dkelly@apago.com) }
TIFFTAG_OPIIMAGEID = 32781; { %OPI ImageID [Adobe TIFF technote] }
{ tags 32952-32956 are private tags registered to Island Graphics }
TIFFTAG_REFPTS = 32953; { image reference points }
TIFFTAG_REGIONTACKPOINT = 32954; { region-xform tack point }
TIFFTAG_REGIONWARPCORNERS = 32955; { warp quadrilateral }
TIFFTAG_REGIONAFFINE = 32956; { affine transformation mat }
{ tags 32995-32999 are private tags registered to SGI }
TIFFTAG_MATTEING = 32995; { $use ExtraSamples }
TIFFTAG_DATATYPE = 32996; { $use SampleFormat }
TIFFTAG_IMAGEDEPTH = 32997; { z depth of image }
TIFFTAG_TILEDEPTH = 32998; { z depth/data tile }
{ tags 33300-33309 are private tags registered to Pixar }
{ TIFFTAG_PIXAR_IMAGEFULLWIDTH and TIFFTAG_PIXAR_IMAGEFULLLENGTH are set when an image has been cropped out of a larger image.
They reflect the size of the original uncropped image. The TIFFTAG_XPOSITION and TIFFTAG_YPOSITION can be used to determine the
position of the smaller image in the larger one. }
TIFFTAG_PIXAR_IMAGEFULLWIDTH = 33300; { full image size in x }
TIFFTAG_PIXAR_IMAGEFULLLENGTH = 33301; { full image size in y }
{ Tags 33302-33306 are used to identify special image modes and data used by Pixar's texture formats. }
TIFFTAG_PIXAR_TEXTUREFORMAT = 33302; { texture map format }
TIFFTAG_PIXAR_WRAPMODES = 33303; { s & t wrap modes }
TIFFTAG_PIXAR_FOVCOT = 33304; { cotan(fov) for env. maps }
TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN = 33305;
TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA = 33306;
{ tag 33405 is a private tag registered to Eastman Kodak }
TIFFTAG_WRITERSERIALNUMBER = 33405; { device serial number }
{ tag 33432 is listed in the 6.0 spec w/ unknown ownership }
TIFFTAG_COPYRIGHT = 33432; { copyright string }
{ IPTC TAG from RichTIFF specifications }
TIFFTAG_RICHTIFFIPTC = 33723;
{ 34016-34029 are reserved for ANSI IT8 TIFF/IT <dkelly@apago.com) }
TIFFTAG_IT8SITE = 34016; { site name }
TIFFTAG_IT8COLORSEQUENCE = 34017; { color seq. [RGB,CMYK,etc] }
TIFFTAG_IT8HEADER = 34018; { DDES Header }
TIFFTAG_IT8RASTERPADDING = 34019; { raster scanline padding }
TIFFTAG_IT8BITSPERRUNLENGTH = 34020; { # of bits in short run }
TIFFTAG_IT8BITSPEREXTENDEDRUNLENGTH = 34021; { # of bits in long run }
TIFFTAG_IT8COLORTABLE = 34022; { LW colortable }
TIFFTAG_IT8IMAGECOLORINDICATOR = 34023; { BP/BL image color switch }
TIFFTAG_IT8BKGCOLORINDICATOR = 34024; { BP/BL bg color switch }
TIFFTAG_IT8IMAGECOLORVALUE = 34025; { BP/BL image color value }
TIFFTAG_IT8BKGCOLORVALUE = 34026; { BP/BL bg color value }
TIFFTAG_IT8PIXELINTENSITYRANGE = 34027; { MP pixel intensity value }
TIFFTAG_IT8TRANSPARENCYINDICATOR = 34028; { HC transparency switch }
TIFFTAG_IT8COLORCHARACTERIZATION = 34029; { color character. table }
TIFFTAG_IT8HCUSAGE = 34030; { HC usage indicator }
TIFFTAG_IT8TRAPINDICATOR = 34031; { Trapping indicator (untrapped=0, trapped=1) }
TIFFTAG_IT8CMYKEQUIVALENT = 34032; { CMYK color equivalents }
{ tags 34232-34236 are private tags registered to Texas Instruments }
TIFFTAG_FRAMECOUNT = 34232; { Sequence Frame Count }
{ tag 34750 is a private tag registered to Adobe? }
TIFFTAG_ICCPROFILE = 34675; { ICC profile data }
{ tag 34377 is private tag registered to Adobe for PhotoShop }
TIFFTAG_PHOTOSHOP = 34377;
{ tag 34750 is a private tag registered to Pixel Magic }
TIFFTAG_JBIGOPTIONS = 34750; { JBIG options }
{ tags 34908-34914 are private tags registered to SGI }
TIFFTAG_FAXRECVPARAMS = 34908; { encoded Class 2 ses. parms }
TIFFTAG_FAXSUBADDRESS = 34909; { received SubAddr string }
TIFFTAG_FAXRECVTIME = 34910; { receive time (secs) }
{ tags 37439-37443 are registered to SGI <gregl@sgi.com> }
TIFFTAG_STONITS = 37439; { Sample value to Nits }
{ tag 34929 is a private tag registered to FedEx }
TIFFTAG_FEDEX_EDR = 34929; { unknown use }
{ tag 65535 is an undefined tag used by Eastman Kodak }
TIFFTAG_DCSHUESHIFTVALUES = 65535; { hue shift correction data }
{ The following are ``pseudo tags'' that can be used to control codec-specific functionality. These tags are not written to file.
Note that these values start at 0xffff+1 so that they'll never collide with Aldus-assigned tags. }
TIFFTAG_FAXMODE = 65536; { Group 3/4 format control }
FAXMODE_CLASSIC = $0; { default, include RTC }
FAXMODE_NORTC = $1; { no RTC at end of data }
FAXMODE_NOEOL = $2; { no EOL code at end of row }
FAXMODE_BYTEALIGN = $4; { byte align row }
FAXMODE_WORDALIGN = $8; { word align row }
FAXMODE_CLASSF = FAXMODE_NORTC; { TIFF Class F }
TIFFTAG_JPEGQUALITY = 65537; { Compression quality level }
{ Note: quality level is on the IJG 0-100 scale. Default value is 75 }
TIFFTAG_JPEGCOLORMODE = 65538; { Auto RGB<=>YCbCr convert? }
JPEGCOLORMODE_RAW = $0; { no conversion (default) }
JPEGCOLORMODE_RGB = $1; { do auto conversion }
TIFFTAG_JPEGTABLESMODE = 65539; { What to put in JPEGTables }
JPEGTABLESMODE_QUANT = $1; { include quantization tbls }
JPEGTABLESMODE_HUFF = $2; { include Huffman tbls }
{ Note: default is JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF }
TIFFTAG_FAXFILLFUNC = 65540; { G3/G4 fill function }
TIFFTAG_PIXARLOGDATAFMT = 65549; { PixarLogCodec I/O data sz }
PIXARLOGDATAFMT_8BIT = 0; { regular u_char samples }
PIXARLOGDATAFMT_8BITABGR = 1; { ABGR-order u_chars }
PIXARLOGDATAFMT_11BITLOG = 2; { 11-bit log-encoded (raw) }
PIXARLOGDATAFMT_12BITPICIO = 3; { as per PICIO (1.0==2048) }
PIXARLOGDATAFMT_16BIT = 4; { signed short samples }
PIXARLOGDATAFMT_FLOAT = 5; { IEEE float samples }
{ 65550-65556 are allocated to Oceana Matrix <dev@oceana.com> }
TIFFTAG_DCSIMAGERTYPE = 65550; { imager model & filter }
DCSIMAGERMODEL_M3 = 0; { M3 chip (1280 x 1024) }
DCSIMAGERMODEL_M5 = 1; { M5 chip (1536 x 1024) }
DCSIMAGERMODEL_M6 = 2; { M6 chip (3072 x 2048) }
DCSIMAGERFILTER_IR = 0; { infrared filter }
DCSIMAGERFILTER_MONO = 1; { monochrome filter }
DCSIMAGERFILTER_CFA = 2; { color filter array }
DCSIMAGERFILTER_OTHER = 3; { other filter }
TIFFTAG_DCSINTERPMODE = 65551; { interpolation mode }
DCSINTERPMODE_NORMAL = 0; { whole image, default }
DCSINTERPMODE_PREVIEW = 1; { preview of image (384x256) }
TIFFTAG_DCSBALANCEARRAY = 65552; { color balance values }
TIFFTAG_DCSCORRECTMATRIX = 65553; { color correction values }
TIFFTAG_DCSGAMMA = 65554; { gamma value }
TIFFTAG_DCSTOESHOULDERPTS = 65555; { toe & shoulder points }
TIFFTAG_DCSCALIBRATIONFD = 65556; { calibration file desc }
{ Note: quality level is on the ZLIB 1-9 scale. Default value is -1 }
TIFFTAG_ZIPQUALITY = 65557; { compression quality level }
TIFFTAG_PIXARLOGQUALITY = 65558; { PixarLog uses same scale }
{ 65559 is allocated to Oceana Matrix <dev@oceana.com> }
TIFFTAG_DCSCLIPRECTANGLE = 65559; { area of image to acquire }
TIFFTAG_SGILOGDATAFMT = 65560; { SGILog user data format }
SGILOGDATAFMT_FLOAT = 0; { IEEE float samples }
SGILOGDATAFMT_16BIT = 1; { 16-bit samples }
SGILOGDATAFMT_RAW = 2; { uninterpreted data }
SGILOGDATAFMT_8BIT = 3; { 8-bit RGB monitor values }
TIFFTAG_SGILOGENCODE = 65561; { SGILog data encoding control }
SGILOGENCODE_NODITHER = 0; { do not dither encoded values }
SGILOGENCODE_RANDITHER = 1; { randomly dither encd values }
{ Flags to pass to TIFFPrintDirectory to control printing of data structures that are potentially very large. Bit-or these flags to
enable printing multiple items. }
TIFFPRINT_NONE = $0; { no extra info }
TIFFPRINT_STRIPS = $1; { strips/tiles info }
TIFFPRINT_CURVES = $2; { color/gray response curves }
TIFFPRINT_COLORMAP = $4; { colormap }
TIFFPRINT_JPEGQTABLES = $100; { JPEG Q matrices }
TIFFPRINT_JPEGACTABLES = $200; { JPEG AC tables }
TIFFPRINT_JPEGDCTABLES = $200; { JPEG DC tables }
TIFF_ANY = TIFF_NOTYPE; { for field descriptor searching }
TIFF_VARIABLE = -1; { marker for variable length tags }
TIFF_SPP = -2; { marker for SamplesPerPixel tags }
TIFF_VARIABLE2 = -3; { marker for uint32 var-length tags }
FIELD_CUSTOM = 65;
{added for LibTiff 3.9.4 by Alex (leontyyy@gmail.com) Dec.2011}
TIFFTAG_EXIFIFD = 34665; { pointer to the Exif IFD }
EXIFTAG_FOCALLENGTH = 37386; { focal length }
EXIFTAG_FOCALLENGTHIN35MMFILM = 41989; { indicates the equivalent focal length assuming a 35mm film camera, in mm }
EXIFTAG_EXIFVERSION = 36864; { version of exif format }
EXIFTAG_DATETIMEDIGITIZED = 36868; { date and time when the image was stored as digital data }
EXIFTAG_DATETIMEORIGINAL = 36867; { date and time when the original image data was generated }
EXIFTAG_EXPOSURETIME = 33434; { exposure time, given in seconds }
EXIFTAG_FNUMBER = 33437; { F number }
EXIFTAG_EXPOSUREPROGRAM = 34850; { class of the program used by the camera to set exposure }
EXIFTAG_SPECTRALSENSITIVITY = 34852; { spectral sensitivity of each channel of the camera used }
EXIFTAG_ISOSPEEDRATINGS = 34855; { ISO Speed and ISO Latitude }
EXIFTAG_OECF = 34856; { Opto-Electric Conversion Function }
EXIFTAG_COMPONENTSCONFIGURATION = 37121; { meaning of each component }
EXIFTAG_COMPRESSEDBITSPERPIXEL = 37122; { compression mode }
EXIFTAG_SHUTTERSPEEDVALUE = 37377; { shutter speed }
EXIFTAG_APERTUREVALUE = 37378; { lens aperture }
EXIFTAG_BRIGHTNESSVALUE = 37379; { brightness }
EXIFTAG_EXPOSUREBIASVALUE = 37380; { exposure bias }
EXIFTAG_MAXAPERTUREVALUE = 37381; { maximum lens aperture }
EXIFTAG_SUBJECTDISTANCE = 37382; { distance to the subject in meters }
EXIFTAG_METERINGMODE = 37383; { metering mode }
EXIFTAG_LIGHTSOURCE = 37384; { light source }
EXIFTAG_FLASH = 37385; { flash }
EXIFTAG_SUBJECTAREA = 37396; { subject area (in exif ver.2.2) }
EXIFTAG_MAKERNOTE = 37500; { manufacturer notes }
EXIFTAG_USERCOMMENT = 37510; { user comments }
EXIFTAG_SUBSECTIME = 37520; { DateTime subseconds }
EXIFTAG_SUBSECTIMEORIGINAL = 37521; { DateTimeOriginal subseconds }
EXIFTAG_SUBSECTIMEDIGITIZED = 37522; { DateTimeDigitized subseconds }
EXIFTAG_FLASHPIXVERSION = 40960; { FlashPix format version }
EXIFTAG_COLORSPACE = 40961; { color space information }
EXIFTAG_PIXELXDIMENSION = 40962; { valid image width }
EXIFTAG_PIXELYDIMENSION = 40963; { valid image height }
EXIFTAG_RELATEDSOUNDFILE = 40964; { related audio file }
EXIFTAG_FLASHENERGY = 41483; { flash energy }
EXIFTAG_SPATIALFREQUENCYRESPONSE = 41484; { spatial frequency response }
EXIFTAG_FOCALPLANEXRESOLUTION = 41486; { focal plane X resolution }
EXIFTAG_FOCALPLANEYRESOLUTION = 41487; { focal plane Y resolution }
EXIFTAG_FOCALPLANERESOLUTIONUNIT = 41488; { focal plane resolution unit }
EXIFTAG_SUBJECTLOCATION = 41492; { subject location }
EXIFTAG_EXPOSUREINDEX = 41493; { exposure index }
EXIFTAG_SENSINGMETHOD = 41495; { sensing method }
EXIFTAG_FILESOURCE = 41728; { file source }
EXIFTAG_SCENETYPE = 41729; { scene type }
EXIFTAG_CFAPATTERN = 41730; { CFA pattern }
EXIFTAG_CUSTOMRENDERED = 41985; { custom image processing (in exif ver.2.2) }
EXIFTAG_EXPOSUREMODE = 41986; { exposure mode (in exif ver.2.2) }
EXIFTAG_WHITEBALANCE = 41987; { white balance (in exif ver.2.2) }
EXIFTAG_DIGITALZOOMRATIO = 41988; { digital zoom ratio (in exif ver.2.2) }
EXIFTAG_SCENECAPTURETYPE = 41990; { scene capture type (in exif ver.2.2) }
EXIFTAG_GAINCONTROL = 41991; { gain control (in exif ver.2.2) }
EXIFTAG_CONTRAST = 41992; { contrast (in exif ver.2.2) }
EXIFTAG_SATURATION = 41993; { saturation (in exif ver.2.2) }
EXIFTAG_SHARPNESS = 41994; { sharpness (in exif ver.2.2) }
EXIFTAG_DEVICESETTINGDESCRIPTION = 41995; { device settings description (in exif ver.2.2) }
EXIFTAG_SUBJECTDISTANCERANGE = 41996; { subject distance range (in exif ver.2.2) }
EXIFTAG_IMAGEUNIQUEID = 42016; { Unique image ID (in exif ver.2.2) }
type
PTIFF = Pointer;
PTIFFRGBAImage = Pointer;
TIFFReadWriteProc = function(fd: thandle_t; buf: tdata_t; size: tsize_t): tsize_t; cdecl;
TIFFSeekProc = function(fd: thandle_t; off: toff_t; whence: Integer): toff_t; cdecl;
TIFFCloseProc = function(fd: thandle_t): Integer; cdecl;
TIFFSizeProc = function(fd: thandle_t): toff_t; cdecl;
TIFFMapFileProc = function(fd: thandle_t; var pbase: tdata_t; var psize: toff_t): Integer; cdecl;
TIFFUnmapFileProc = procedure(fd: thandle_t; base: tdata_t; size: toff_t); cdecl;
TIFFExtendProc = procedure(Handle: PTIFF); cdecl;
TIFFErrorHandler = procedure(Module: PAnsiChar; const Format: PAnsiChar; Params: va_list); cdecl;
TIFFInitMethod = function(Handle: PTIFF; Scheme: Integer): Integer; cdecl;
PTIFFCodec = ^TIFFCodec;
TIFFCodec = record
Name: PAnsiChar;
Scheme: Word;
Init: TIFFInitMethod;
end;
PTIFFFieldInfo = ^TIFFFieldInfo;
TIFFFieldInfo = record
FieldTag: Cardinal; { field's tag }
FieldReadCount: Smallint; { read count/TIFF_VARIABLE/TIFF_SPP }
FieldWriteCount: Smallint; { write count/TIFF_VARIABLE }
FieldType: Integer; { type of associated data }
FieldBit: Word; { bit in fieldsset bit vector }
FieldOkToChange: Byte; { if true, can change while writing }
FieldPassCount: Byte; { if true, pass dir count on set }
FieldName: PAnsiChar; { ASCII name }
end;
PTIFFTagValue = ^TIFFTagValue;
TIFFTagValue = record
Info: PTIFFFieldInfo;
Count: Integer;
Value: Pointer;
end;
{$IFDEF DYNAMIC_DLL_LOADING}
var
TIFFGetVersion: function(): PAnsiChar; cdecl;
TIFFOpen: function (const FileName: PAnsiChar; const Mode: PAnsiChar): PTIFF; cdecl;
TIFFClientOpen: function(
const Name: PAnsiChar;
const Mode: PAnsiChar;
ClientData: Cardinal;
ReadProc: TIFFReadWriteProc;
WriteProc: TIFFReadWriteProc;
SeekProc: TIFFSeekProc;
CloseProc: TIFFCloseProc;
SizeProc: TIFFSizeProc;
MapProc: TIFFMapFileProc;
UnmapProc: TIFFUnmapFileProc): PTIFF; cdecl;
TIFFClose: procedure(Handle: PTIFF); cdecl;
TIFFSetFileno: function(Handle: PTIFF; Newvalue: Integer): Integer; cdecl;
TIFFSetField: function(Handle: PTIFF; Tag: Cardinal): Integer; cdecl varargs;
TIFFGetField: function(Handle: PTIFF; Tag: Cardinal): Integer; cdecl varargs;
TIFFGetFieldDefaulted: function(Handle: PTIFF; Tag: Cardinal): Integer; cdecl varargs;
TIFFReadRGBAImageOriented: function(Handle: PTIFF; RWidth,RHeight: Cardinal; Raster: Pointer; Orientation: Integer; Stop: Integer): Integer; cdecl;
TIFFReadScanline: function(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: tsample_t): Integer; cdecl;
TIFFWriteScanline: function(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: tsample_t): Integer; cdecl;
TIFFScanlineSize: function(Handle: PTIFF): tmsize_t; cdecl;
TIFFDefaultStripSize: function(Handle: PTIFF; Request: Cardinal): Cardinal; cdecl;
TIFFNumberOfDirectories: function(Handle: PTIFF): Word; cdecl;
TIFFSetDirectory: function(Handle: PTIFF; Dirn: Word): Integer; cdecl;
TIFFWriteDirectory: function(Handle: PTIFF): Integer; cdecl;
TIFFReadEXIFDirectory: function(Handle: PTIFF; Diroff: toff_t): Integer; cdecl;
TIFFSetErrorHandler: function(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl;
TIFFSetWarningHandler: function(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl;
function LoadTiffLibrary: Boolean;
{$ELSE}
function TIFFGetVersion: PAnsiChar; cdecl; external SLibName;
function TIFFFindCODEC(Scheme: Word): PTIFFCodec; cdecl; external SLibName;
function TIFFRegisterCODEC(Scheme: Word; Name: PAnsiChar; InitMethod: TIFFInitMethod): PTIFFCodec; cdecl; external SLibName;
procedure TIFFUnRegisterCODEC(c: PTIFFCodec); cdecl; external SLibName;
function TIFFIsCODECConfigured(Scheme: Word): Integer; cdecl; external SLibName;
function TIFFGetConfiguredCODECs: PTIFFCodec; cdecl; external SLibName;
function TIFFClientOpen(Name: PAnsiChar; Mode: PAnsiChar; ClientData: THandle;
ReadProc: TIFFReadWriteProc;
WriteProc: TIFFReadWriteProc;
SeekProc: TIFFSeekProc;
CloseProc: TIFFCloseProc;
SizeProc: TIFFSizeProc;
MapProc: TIFFMapFileProc;
UnmapProc: TIFFUnmapFileProc): PTIFF; cdecl; external SLibName;
procedure TIFFCleanup(Handle: PTIFF); cdecl; external SLibName;
procedure TIFFClose(Handle: PTIFF); cdecl; external SLibName;
function TIFFFileno(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFSetFileno(Handle: PTIFF; Newvalue: Integer): Integer; cdecl; external SLibName;
function TIFFClientdata(Handle: PTIFF): THandle; cdecl; external SLibName;
function TIFFSetClientdata(Handle: PTIFF; Newvalue: THandle): THandle; cdecl; external SLibName;
function TIFFGetMode(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFSetMode(Handle: PTIFF; Mode: Integer): Integer; cdecl; external SLibName;
function TIFFFileName(Handle: PTIFF): Pointer; cdecl; external SLibName;
function TIFFSetFileName(Handle: PTIFF; Name: PAnsiChar): PAnsiChar; cdecl; external SLibName;
function TIFFGetReadProc(Handle: PTIFF): TIFFReadWriteProc; cdecl; external SLibName;
function TIFFGetWriteProc(Handle: PTIFF): TIFFReadWriteProc; cdecl; external SLibName;
function TIFFGetSeekProc(Handle: PTIFF): TIFFSeekProc; cdecl; external SLibName;
function TIFFGetCloseProc(Handle: PTIFF): TIFFCloseProc; cdecl; external SLibName;
function TIFFGetSizeProc(Handle: PTIFF): TIFFSizeProc; cdecl; external SLibName;
procedure TIFFError(Module: Pointer; Fmt: Pointer); cdecl; external SLibName; varargs;
function TIFFSetErrorHandler(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl; external SLibName;
procedure TIFFWarning(Module: Pointer; Fmt: Pointer); cdecl; external SLibName; varargs;
function TIFFSetWarningHandler(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl; external SLibName;
function TIFFSetTagExtender(Extender: TIFFExtendProc): TIFFExtendProc; cdecl; external SLibName;
function TIFFFlush(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFFlushData(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFReadEXIFDirectory(Handle: PTIFF; Diroff: toff_t): Integer; cdecl; external SLibName;
function TIFFReadDirectory(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFCurrentDirectory(Handle: PTIFF): Word; cdecl; external SLibName;
function TIFFCurrentDirOffset(Handle: PTIFF): toff_t; cdecl; external SLibName;
function TIFFLastDirectory(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFNumberOfDirectories(Handle: PTIFF): Word; cdecl; external SLibName;
function TIFFSetDirectory(Handle: PTIFF; Dirn: Word): Integer; cdecl; external SLibName;
function TIFFSetSubDirectory(Handle: PTIFF; Diroff: toff_t): Integer; cdecl; external SLibName;
function TIFFCreateDirectory(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFWriteDirectory(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFUnlinkDirectory(handle: PTIFF; Dirn: Word): Integer; cdecl; external SLibName;
procedure TIFFPrintDirectory(Handle: PTIFF; Fd: Pointer; Flags: Integer); cdecl; external SLibName;
function TIFFGetField(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external SLibName; varargs;
function TIFFGetFieldDefaulted(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external SLibName; varargs;
function TIFFVGetField(Handle: PTIFF; Tag: Cardinal; Ap: Pointer): Integer; cdecl; external SLibName;
function TIFFSetField(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external SLibName; varargs;
function TIFFVSetField(Handle: PTIFF; Tag: Cardinal; Ap: Pointer): Integer; cdecl; external SLibName;
function TIFFIsBigEndian(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFIsTiled(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFIsByteSwapped(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFIsUpSampled(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFIsMSB2LSB(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFGetTagListCount(Handle: PTIFF): Integer; cdecl; external SLibName;
function TIFFGetTagListEntry(Handle: PTIFF; TagIndex: Integer): Cardinal; cdecl; external SLibName;
procedure TIFFMergeFieldInfo(Handle: PTIFF; Info: PTIFFFieldInfo; N: Integer); cdecl; external SLibName;
function TIFFFindFieldInfo(Handle: PTIFF; Tag: Cardinal; Dt: Integer): PTIFFFieldInfo; cdecl; external SLibName;
function TIFFFindFieldInfoByName(Handle: PTIFF; FIeldName: PAnsiChar; Dt: Integer): PTIFFFieldInfo; cdecl; external SLibName;
function TIFFFieldWithTag(Handle: PTIFF; Tag: Cardinal): PTIFFFieldInfo; cdecl; external SLibName;
function TIFFFieldWithName(Handle: PTIFF; FieldName: PAnsiChar): PTIFFFieldInfo; cdecl; external SLibName;
function TIFFDataWidth(DataType: Integer): Integer; cdecl; external SLibName;
function TIFFReadRGBAImage(Handle: PTIFF; RWidth,RHeight: Cardinal; Raster: Pointer; Stop: Integer): Integer; cdecl; external SLibName;
function TIFFReadRGBAImageOriented(Handle: PTIFF; RWidth,RHeight: Cardinal; Raster: Pointer; Orientation: Integer; Stop: Integer): Integer; cdecl; external SLibName;
function TIFFReadRGBAStrip(Handle: PTIFF; Row: Cardinal; Raster: Pointer): Integer; cdecl; external SLibName;
function TIFFReadRGBATile(Handle: PTIFF; Col,Row: Cardinal; Raster: Pointer): Integer; cdecl; external SLibName;
function TIFFRGBAImageOk(Handle: PTIFF; Emsg: PAnsiChar): Integer; cdecl; external SLibName;
function TIFFRGBAImageBegin(Img: PTIFFRGBAImage; Handle: PTIFF; Stop: Integer; Emsg: PAnsiChar): Integer; cdecl; external SLibName;
function TIFFRGBAImageGet(Img: PTIFFRGBAImage; Raster: Pointer; W, H: Cardinal): Integer; cdecl; external SLibName;
procedure TIFFRGBAImageEnd(Img: PTIFFRGBAImage); cdecl; external SLibName;
function TIFFCurrentRow(Handle: PTIFF): Cardinal; cdecl; external SLibName;
function TIFFStripSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
function TIFFRawStripSize(Handle: PTIFF; Strip: Cardinal): tmsize_t; cdecl; external SLibName;
function TIFFVStripSize(Handle: PTIFF; NRows: Cardinal): tmsize_t; cdecl; external SLibName;
function TIFFDefaultStripSize(Handle: PTIFF; Request: Cardinal): Cardinal; cdecl; external SLibName;
function TIFFNumberOfStrips(Handle: PTIFF): Cardinal; cdecl; external SLibName;
function TIFFComputeStrip(Handle: PTIFF; Row: Cardinal; Sample: Word): Cardinal; cdecl; external SLibName;
function TIFFReadRawStrip(Handle: PTIFF; Strip: Cardinal; Buf: Pointer; Size: tmsize_t): tmsize_t; cdecl; external SLibName;
function TIFFReadEncodedStrip(Handle: PTIFF; Strip: Cardinal; Buf: Pointer; Size: tmsize_t): tmsize_t; cdecl; external SLibName;
function TIFFWriteRawStrip(Handle: PTIFF; Strip: Cardinal; Data: Pointer; Cc: tmsize_t): tmsize_t; cdecl; external SLibName;
function TIFFWriteEncodedStrip(Handle: PTIFF; Strip: Cardinal; Data: Pointer; Cc: tmsize_t): tmsize_t; cdecl; external SLibName;
function TIFFCurrentStrip(Handle: PTIFF): Cardinal; cdecl; external SLibName;
function TIFFTileSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
function TIFFTileRowSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
function TIFFVTileSize(Handle: PTIFF; NRows: Cardinal): tmsize_t; cdecl; external SLibName;
procedure TIFFDefaultTileSize(Handle: PTIFF; Tw: PCardinal; Th: PCardinal); cdecl; external SLibName;
function TIFFNumberOfTiles(Handle: PTIFF): Cardinal; cdecl; external SLibName;
function TIFFComputeTile(Handle: PTIFF; X,Y,Z: Cardinal; S: Word): Cardinal; cdecl; external SLibName;
function TIFFReadRawTile(Handle: PTIFF; Tile: Cardinal; Buf: Pointer; Size: tmsize_t): tmsize_t; cdecl; external SLibName;
function TIFFReadEncodedTile(Handle: PTIFF; Tile: Cardinal; Buf: Pointer; Size: tmsize_t): tmsize_t; cdecl; external SLibName;
function TIFFWriteRawTile(Handle: PTIFF; Tile: Cardinal; Data: Pointer; Cc: tmsize_t): tmsize_t; cdecl; external SLibName;
function TIFFWriteEncodedTile(Handle: PTIFF; Tile: Cardinal; Data: Pointer; Cc: tmsize_t): tmsize_t; cdecl; external SLibName;
function TIFFCurrentTile(Handle: PTIFF): Cardinal; cdecl; external SLibName;
function TIFFScanlineSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
function TIFFScanlineSize64(Handle: PTIFF): Int64; cdecl; external SLibName;
function TIFFRasterScanlineSize64(Handle: PTIFF): Int64; cdecl; external SLibName;
function TIFFRasterScanlineSize(Handle: PTIFF): tmsize_t; cdecl; external SLibName;
function TIFFReadScanline(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: tsample_t): Integer; cdecl; external SLibName;
function TIFFWriteScanline(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: tsample_t): Integer; cdecl; external SLibName;
procedure TIFFSetWriteOffset(Handle: PTIFF; Off: toff_t); cdecl; external SLibName;
procedure TIFFSwabShort(Wp: PWord); cdecl; external SLibName;
procedure TIFFSwabLong(Lp: PCardinal); cdecl; external SLibName;
procedure TIFFSwabDouble(Dp: PDouble); cdecl; external SLibName;
procedure TIFFSwabArrayOfShort(Wp: PWord; N: tmsize_t); cdecl; external SLibName;
procedure TIFFSwabArrayOfTriples(tp:PByte; n: tmsize_t); cdecl; external SLibName;
procedure TIFFSwabArrayOfLong(Lp: PCardinal; N: tmsize_t); cdecl; external SLibName;
procedure TIFFSwabArrayOfDouble(Dp: PDouble; N: tmsize_t); cdecl; external SLibName;
procedure TIFFReverseBits(Cp: Pointer; N: tmsize_t); cdecl; external SLibName;
function TIFFGetBitRevTable(Reversed: Integer): Pointer; cdecl; external SLibName;
{$ENDIF}
type
TUserTiffErrorHandler = procedure(const Module, Message: AnsiString);
procedure SetUserMessageHandlers(ErrorHandler, WarningHandler: TUserTiffErrorHandler);
function IsVersion4: Boolean;
implementation
{$IFDEF FPC}
uses
dynlibs;
{$ENDIF}
var
UserTiffWarningHandler: TUserTiffErrorHandler;
UserTiffErrorHandler: TUserTiffErrorHandler;
procedure SetUserMessageHandlers(ErrorHandler, WarningHandler: TUserTiffErrorHandler);
begin
UserTiffErrorHandler := ErrorHandler;
UserTiffWarningHandler := WarningHandler;
end;
procedure SetInternalMessageHandlers(ErrorHandler, WarningHandler: TIFFErrorHandler);
begin
TIFFSetWarningHandler(@WarningHandler);
TIFFSetErrorHandler(@ErrorHandler);
end;
const
{$IFDEF MSWINDOWS}
SRuntimeLib = 'msvcrt.dll';
{$ELSE}
SRuntimeLib = 'libc.so';
{$ENDIF}
function snprintf(S: PAnsiChar; N: Integer; const Format: PAnsiChar): Integer; cdecl; varargs; external SRuntimeLib name {$IFDEF MSWINDOWS}'_snprintf'{$ELSE}'snprintf'{$ENDIF};
procedure FormatAndCallHandler(Handler: TUserTiffErrorHandler; Module: PAnsiChar; Format: PAnsiChar; Params: va_list);
var
Len: Integer;
Buffer: array[0..511] of AnsiChar;
Msg: AnsiString;
begin
Len := snprintf(@Buffer, 512, Format, Params);
SetString(Msg, Buffer, Len);
Handler(Module, Msg);
end;
procedure InternalTIFFWarning(Module: PAnsiChar; Format: PAnsiChar; Params: va_list); cdecl;
begin
if Assigned(UserTiffWarningHandler) then
FormatAndCallHandler(UserTiffWarningHandler, Module, Format, Params);
end;
procedure InternallTIFFError(Module: PAnsiChar; Format: PAnsiChar; Params: va_list); cdecl;
begin
if Assigned(UserTiffErrorHandler) then
FormatAndCallHandler(UserTiffErrorHandler, Module, Format, Params);
end;
function IsVersion4: Boolean;
var
Version: PAnsiChar;
begin
Version := TIFFGetVersion;
Result := Pos(AnsiString('Version 4'), Version) > 0;
end;
procedure CheckVersion;
begin
{$IFDEF UNIX}
if not IsVersion4 then
WriteLn('Warning: installed libtiff seems to be version 3.x. TIFF functions will probably fail. Install libtiff5 package to get libtiff 4.x.');
{$ENDIF}
end;
{$IFDEF DYNAMIC_DLL_LOADING}
var
TiffLibHandle: {$IFDEF FPC}TLibHandle{$ELSE}THandle{$ENDIF} = 0;
function GetProcAddr(const AProcName: PAnsiChar): Pointer;
begin
Result := GetProcAddress(TiffLibHandle, AProcName);
if Addr(Result) = nil then begin
RaiseLastOSError;
end;
end;
function LoadTiffLibrary: Boolean;
begin
Result := False;
if TiffLibHandle = 0 then
begin
TiffLibHandle := LoadLibrary(SLibName);
{$IF Defined(DARWIN)}
if TiffLibHandle = 0 then
TiffLibHandle := LoadLibrary('@executable_path/' + SLibName);
{$IFEND}
if TiffLibHandle <> 0 then
begin
TIFFGetVersion := GetProcAddr('TIFFGetVersion');
TIFFOpen := GetProcAddr('TIFFOpen');
TIFFClientOpen := GetProcAddr('TIFFClientOpen');
TIFFClose := GetProcAddr('TIFFClose');
TIFFSetFileno := GetProcAddr('TIFFSetFileno');
TIFFSetField := GetProcAddr('TIFFSetField');
TIFFGetField := GetProcAddr('TIFFGetField');
TIFFGetFieldDefaulted := GetProcAddr('TIFFGetFieldDefaulted');
TIFFReadRGBAImageOriented := GetProcAddr('TIFFReadRGBAImageOriented');
TIFFReadScanline := GetProcAddr('TIFFReadScanline');
TIFFWriteScanline := GetProcAddr('TIFFWriteScanline');
TIFFScanlineSize := GetProcAddr('TIFFScanlineSize');
TIFFDefaultStripSize := GetProcAddr('TIFFDefaultStripSize');
TIFFNumberOfDirectories := GetProcAddr('TIFFNumberOfDirectories');
TIFFSetDirectory := GetProcAddr('TIFFSetDirectory');
TIFFWriteDirectory := GetProcAddr('TIFFWriteDirectory');
TIFFReadEXIFDirectory := GetProcAddr('TIFFReadEXIFDirectory');
TIFFSetErrorHandler := GetProcAddr('TIFFSetErrorHandler');
TIFFSetWarningHandler := GetProcAddr('TIFFSetWarningHandler');
SetInternalMessageHandlers(@InternallTIFFError, @InternalTIFFWarning);
CheckVersion;
Result := True;
end;
end;
end;
procedure FreeTiffLibrary;
begin
if TiffLibHandle <> 0 then begin
FreeLibrary(TiffLibHandle);
TiffLibHandle := 0;
end;
end;
{$ENDIF}
initialization
{$IFNDEF DYNAMIC_DLL_LOADING}
SetInternalMessageHandlers(@InternallTIFFError, @InternalTIFFWarning);
CheckVersion;
{$ENDIF}
finalization
{$IFDEF DYNAMIC_DLL_LOADING}
FreeTiffLibrary;
{$ENDIF}
end.