📄 libtiffdelphi.pas
字号:
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;
type
PTIFF = Pointer;
PTIFFRGBAImage = Pointer;
TIFFErrorHandler = procedure(a: Pointer; b: Pointer; c: Pointer); cdecl;
LibTiffDelphiErrorHandler = procedure(const a,b: String);
TIFFReadWriteProc = function(Fd: Cardinal; Buffer: Pointer; Size: Integer): Integer; cdecl;
TIFFSeekProc = function(Fd: Cardinal; Off: Cardinal; Whence: Integer): Cardinal; cdecl;
TIFFCloseProc = function(Fd: Cardinal): Integer; cdecl;
TIFFSizeProc = function(Fd: Cardinal): Cardinal; cdecl;
TIFFMapFileProc = function(Fd: Cardinal; PBase: PPointer; PSize: PCardinal): Integer; cdecl;
TIFFUnmapFileProc = procedure(Fd: Cardinal; Base: Pointer; Size: Cardinal); cdecl;
TIFFExtendProc = procedure(Handle: PTIFF); cdecl;
TIFFInitMethod = function(Handle: PTIFF; Scheme: Integer): Integer; cdecl;
PTIFFCodec = ^TIFFCodec;
TIFFCodec = record
Name: PChar;
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: PChar; { ASCII name }
end;
PTIFFTagValue = ^TIFFTagValue;
TIFFTagValue = record
Info: PTIFFFieldInfo;
Count: Integer;
Value: Pointer;
end;
function LibTiffDelphiVersion: String;
function TIFFGetVersion: PChar; cdecl; external;
function TIFFFindCODEC(Scheme: Word): PTIFFCodec; cdecl; external;
function TIFFRegisterCODEC(Scheme: Word; Name: PChar; InitMethod: TIFFInitMethod): PTIFFCodec; cdecl; external;
procedure TIFFUnRegisterCODEC(c: PTIFFCodec); cdecl; external;
function TIFFIsCODECConfigured(Scheme: Word): Integer; cdecl; external;
function TIFFGetConfiguredCODECs: PTIFFCodec; cdecl; external;
function TIFFOpen(const Name: String; const Mode: String): PTIFF;
function TIFFOpenStream(const Stream: TStream; const Mode: String): PTIFF;
function TIFFClientOpen(Name: PChar; Mode: PChar; ClientData: Cardinal;
ReadProc: TIFFReadWriteProc;
WriteProc: TIFFReadWriteProc;
SeekProc: TIFFSeekProc;
CloseProc: TIFFCloseProc;
SizeProc: TIFFSizeProc;
MapProc: TIFFMapFileProc;
UnmapProc: TIFFUnmapFileProc): PTIFF; cdecl; external;
procedure TIFFCleanup(Handle: PTIFF); cdecl; external;
procedure TIFFClose(Handle: PTIFF); cdecl; external;
function TIFFFileno(Handle: PTIFF): Integer; cdecl; external;
function TIFFSetFileno(Handle: PTIFF; Newvalue: Integer): Integer; cdecl; external;
function TIFFClientdata(Handle: PTIFF): Cardinal; cdecl; external;
function TIFFSetClientdata(Handle: PTIFF; Newvalue: Cardinal): Cardinal; cdecl; external;
function TIFFGetMode(Handle: PTIFF): Integer; cdecl; external;
function TIFFSetMode(Handle: PTIFF; Mode: Integer): Integer; cdecl; external;
function TIFFFileName(Handle: PTIFF): Pointer; cdecl; external;
function TIFFSetFileName(Handle: PTIFF; Name: PChar): PChar; cdecl; external;
function TIFFGetReadProc(Handle: PTIFF): TIFFReadWriteProc; cdecl; external;
function TIFFGetWriteProc(Handle: PTIFF): TIFFReadWriteProc; cdecl; external;
function TIFFGetSeekProc(Handle: PTIFF): TIFFSeekProc; cdecl; external;
function TIFFGetCloseProc(Handle: PTIFF): TIFFCloseProc; cdecl; external;
function TIFFGetSizeProc(Handle: PTIFF): TIFFSizeProc; cdecl; external;
procedure TIFFError(Module: Pointer; Fmt: Pointer); cdecl; external; varargs;
function TIFFSetErrorHandler(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl; external;
function LibTiffDelphiGetErrorHandler: LibTiffDelphiErrorHandler;
function LibTiffDelphiSetErrorHandler(Handler: LibTiffDelphiErrorHandler): LibTiffDelphiErrorHandler;
procedure TIFFWarning(Module: Pointer; Fmt: Pointer); cdecl; external; varargs;
function TIFFSetWarningHandler(Handler: TIFFErrorHandler): TIFFErrorHandler; cdecl; external;
function LibTiffDelphiGetWarningHandler: LibTiffDelphiErrorHandler;
function LibTiffDelphiSetWarningHandler(Handler: LibTiffDelphiErrorHandler): LibTiffDelphiErrorHandler;
function TIFFSetTagExtender(Extender: TIFFExtendProc): TIFFExtendProc; cdecl; external;
function TIFFFlush(Handle: PTIFF): Integer; cdecl; external;
function TIFFFlushData(Handle: PTIFF): Integer; cdecl; external;
function TIFFReadDirectory(Handle: PTIFF): Integer; cdecl; external;
function TIFFCurrentDirectory(Handle: PTIFF): Word; cdecl; external;
function TIFFCurrentDirOffset(Handle: PTIFF): Cardinal; cdecl; external;
function TIFFLastDirectory(Handle: PTIFF): Integer; cdecl; external;
function TIFFNumberOfDirectories(Handle: PTIFF): Word; cdecl; external;
function TIFFSetDirectory(Handle: PTIFF; Dirn: Word): Integer; cdecl; external;
function TIFFSetSubDirectory(Handle: PTIFF; Diroff: Cardinal): Integer; cdecl; external;
function TIFFCreateDirectory(Handle: PTIFF): Integer; cdecl; external;
function TIFFWriteDirectory(Handle: PTIFF): Integer; cdecl; external;
function TIFFUnlinkDirectory(handle: PTIFF; Dirn: Word): Integer; cdecl; external;
procedure TIFFPrintDirectory(Handle: PTIFF; Fd: Pointer; Flags: Integer); cdecl; external;
function TIFFGetField(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external; varargs;
function TIFFGetFieldDefaulted(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external; varargs;
function TIFFVGetField(Handle: PTIFF; Tag: Cardinal; Ap: Pointer): Integer; cdecl; external;
function TIFFSetField(Handle: PTIFF; Tag: Cardinal): Integer; cdecl; external; varargs;
function TIFFVSetField(Handle: PTIFF; Tag: Cardinal; Ap: Pointer): Integer; cdecl; external;
function TIFFIsBigEndian(Handle: PTIFF): Integer; cdecl; external;
function TIFFIsTiled(Handle: PTIFF): Integer; cdecl; external;
function TIFFIsByteSwapped(Handle: PTIFF): Integer; cdecl; external;
function TIFFIsUpSampled(Handle: PTIFF): Integer; cdecl; external;
function TIFFIsMSB2LSB(Handle: PTIFF): Integer; cdecl; external;
function TIFFGetTagListCount(Handle: PTIFF): Integer; cdecl; external;
function TIFFGetTagListEntry(Handle: PTIFF; TagIndex: Integer): Cardinal; cdecl; external;
procedure TIFFMergeFieldInfo(Handle: PTIFF; Info: PTIFFFieldInfo; N: Integer); cdecl; external;
function TIFFFindFieldInfo(Handle: PTIFF; Tag: Cardinal; Dt: Integer): PTIFFFieldInfo; cdecl; external;
function TIFFFindFieldInfoByName(Handle: PTIFF; FIeldName: PChar; Dt: Integer): PTIFFFieldInfo; cdecl; external;
function TIFFFieldWithTag(Handle: PTIFF; Tag: Cardinal): PTIFFFieldInfo; cdecl; external;
function TIFFFieldWithName(Handle: PTIFF; FieldName: PChar): PTIFFFieldInfo; cdecl; external;
function TIFFDataWidth(DataType: Integer): Integer; cdecl; external;
function TIFFReadRGBAImage(Handle: PTIFF; RWidth,RHeight: Cardinal; Raster: Pointer; Stop: Integer): Integer; cdecl; external;
function TIFFReadRGBAImageOriented(Handle: PTIFF; RWidth,RHeight: Cardinal; Raster: Pointer; Orientation: Integer; Stop: Integer): Integer; cdecl; external;
function TIFFReadRGBAStrip(Handle: PTIFF; Row: Cardinal; Raster: Pointer): Integer; cdecl; external;
function TIFFReadRGBATile(Handle: PTIFF; Col,Row: Cardinal; Raster: Pointer): Integer; cdecl; external;
function TIFFRGBAImageOk(Handle: PTIFF; Emsg: PChar): Integer; cdecl; external;
function TIFFRGBAImageBegin(Img: PTIFFRGBAImage; Handle: PTIFF; Stop: Integer; Emsg: PChar): Integer; cdecl; external;
function TIFFRGBAImageGet(Img: PTIFFRGBAImage; Raster: Pointer; W,H: Cardinal): Integer; cdecl; external;
procedure TIFFRGBAImageEnd(Img: PTIFFRGBAImage); cdecl; external;
function TIFFCurrentRow(Handle: PTIFF): Cardinal; cdecl; external;
function TIFFStripSize(Handle: PTIFF): Integer; cdecl; external;
function TIFFRawStripSize(Handle: PTIFF; Strip: Cardinal): Integer; cdecl; external;
function TIFFVStripSize(Handle: PTIFF; NRows: Cardinal): Integer; cdecl; external;
function TIFFDefaultStripSize(Handle: PTIFF; Request: Cardinal): Cardinal; cdecl; external;
function TIFFNumberOfStrips(Handle: PTIFF): Cardinal; cdecl; external;
function TIFFComputeStrip(Handle: PTIFF; Row: Cardinal; Sample: Word): Cardinal; cdecl; external;
function TIFFReadRawStrip(Handle: PTIFF; Strip: Cardinal; Buf: Pointer; Size: Integer): Integer; cdecl; external;
function TIFFReadEncodedStrip(Handle: PTIFF; Strip: Cardinal; Buf: Pointer; Size: Integer): Integer; cdecl; external;
function TIFFWriteRawStrip(Handle: PTIFF; Strip: Cardinal; Data: Pointer; Cc: Integer): Integer; cdecl; external;
function TIFFWriteEncodedStrip(Handle: PTIFF; Strip: Cardinal; Data: Pointer; Cc: Integer): Integer; cdecl; external;
function TIFFCurrentStrip(Handle: PTIFF): Cardinal; cdecl; external;
function TIFFTileSize(Handle: PTIFF): Integer; cdecl; external;
function TIFFTileRowSize(Handle: PTIFF): Integer; cdecl; external;
function TIFFVTileSize(Handle: PTIFF; NRows: Cardinal): Integer; cdecl; external;
procedure TIFFDefaultTileSize(Handle: PTIFF; Tw: PCardinal; Th: PCardinal); cdecl; external;
function TIFFNumberOfTiles(Handle: PTIFF): Cardinal; cdecl; external;
function TIFFComputeTile(Handle: PTIFF; X,Y,Z: Cardinal; S: Word): Cardinal; cdecl; external;
function TIFFReadRawTile(Handle: PTIFF; Tile: Cardinal; Buf: Pointer; Size: Integer): Integer; cdecl; external;
function TIFFReadEncodedTile(Handle: PTIFF; Tile: Cardinal; Buf: Pointer; Size: Integer): Integer; cdecl; external;
function TIFFWriteRawTile(Handle: PTIFF; Tile: Cardinal; Data: Pointer; Cc: Integer): Integer; cdecl; external;
function TIFFWriteEncodedTile(Handle: PTIFF; Tile: Cardinal; Data: Pointer; Cc: Integer): Integer; cdecl; external;
function TIFFCurrentTile(Handle: PTIFF): Cardinal; cdecl; external;
function TIFFScanlineSize(Handle: PTIFF): Integer; cdecl; external;
function TIFFRasterScanlineSize(Handle: PTIFF): Integer; cdecl; external;
function TIFFReadScanline(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: Word): Integer; cdecl; external;
function TIFFWriteScanline(Handle: PTIFF; Buf: Pointer; Row: Cardinal; Sample: Word): Integer; cdecl; external;
procedure TIFFSetWriteOffset(Handle: PTIFF; Off: Cardinal); cdecl; external;
procedure TIFFSwabShort(Wp: PWord); cdecl; external;
procedure TIFFSwabLong(Lp: PCardinal); cdecl; external;
procedure TIFFSwabDouble(Dp: PDouble); cdecl; external;
procedure TIFFSwabArrayOfShort(Wp: PWord; N: Cardinal); cdecl; external;
procedure TIFFSwabArrayOfLong(Lp: PCardinal; N: Cardinal); cdecl; external;
procedure TIFFSwabArrayOfDouble(Dp: PDouble; N: Cardinal); cdecl; external;
procedure TIFFReverseBits(Cp: Pointer; N: Cardinal); cdecl; external;
function TIFFGetBitRevTable(Reversed: Integer): Pointer; cdecl; external;
function _TIFFmalloc(s: Longint): Pointer; cdecl;
function _TIFFrealloc(p: Pointer; s: Longint): Pointer; cdecl;
procedure _TIFFfree(p: Pointer); cdecl;
implementation
uses
Math, LibDelphi, LibJpegDelphi, ZLibDelphi;
type
TQsortCompare = function(a,b: Pointer): Integer; cdecl;
TBsearchFcmp = function(a: Pointer; b: Pointer): Integer; cdecl;
function floor(x: Double): Double; cdecl; forward;
function pow(x: Double; y: Double): Double; cdecl; forward;
function sqrt(x: Double): Double; cdecl; forward;
function atan2(y: Double; x: Double): Double; cdecl; forward;
function exp(x: Double): Double; cdecl; forward;
function log(x: Double): Double; cdecl; forward;
function fabs(x: Double): Double; cdecl; forward;
function rand: Integer; cdecl; forward;
function strlen(s: Pointer): Cardinal; cdecl; forward;
function strcmp(a: Pointer; b: Pointer): Integer; cdecl; forward;
function strncmp(a: Pointer; b: Pointer; c: Longint): Integer; cdecl; forward;
procedure qsort(base: Pointer; num: Cardinal; width: Cardinal; compare: TQSortCompare); cdecl; forward;
function bsearch(key: Pointer; base: Pointer; nelem: Cardinal; width: Cardinal; fcmp: TBsearchFcmp): Pointer; cdecl; forward;
function memmove(dest: Pointer; src: Pointer; n: Cardinal): Pointer; cdecl; forward;
function strchr(s: Pointer; c: Integer): Pointer; cdecl; forward;
procedure _TIFFmemcpy(d: Pointer; s: Pointer; c: Longint); cdecl; forward;
procedure _TIFFmemset(p: Pointer; v: Integer; c: Longint); cdecl; forward;
function _TIFFmemcmp(buf1: Pointer; buf2: Pointer; count: Cardinal): Integer; cdecl; forward;
var
_TIFFwarningHandler: TIFFErrorHandler;
_TIFFerrorHandler: TIFFErrorHandler;
FLibTiffDelphiWarningHandler: LibTiffDelphiErrorHandler;
FLibTiffDelphiErrorHandler: LibTiffDelphiErrorHandler;
function fabs(x: Double): Double;
begin
if x<0 then
Result:=-x
else
Result:=x;
end;
function atan2(y: Double; x: Double): Double;
begin
Result:=ArcTan2(y,x);
end;
function rand: Integer; cdecl;
begin
Result:=Trunc(Random*($7FFF+1));
end;
function sqrt(x: Double): Double; cdecl;
begin
Result:=System.Sqrt(x);
end;
function log(x: Double): Double; cdecl;
begin
Result:=Ln(x);
end;
function exp(x: Double): Double; cdecl;
begin
Result:=System.Exp(x);
end;
function strchr(s: Pointer; c: Integer): Pointer; cdecl;
begin
Result:=s;
while True do
begin
if PByte(Result)^=c then exit;
if PByte(Result)^=0 then
begin
Result:=nil;
exit;
end;
Inc(PByte(Result));
end;
end;
function memmove(dest: Pointer; src: Pointer; n: Cardinal): Pointer; cdecl;
begin
MoveMemory(dest,src,n);
Result:=dest;
end;
function _TIFFmemcmp(buf1: Pointer; buf2: Pointer; count: Cardinal): Integer; cdecl;
var
ma,mb: PByte;
n: Integer;
begin
ma:=buf1;
mb:=buf2;
n:=0;
while Cardinal(n)<Count do
begin
if ma^<>mb^ then
begin
if ma^<mb^ then
Result:=-1
else
Result:=1;
exit;
end;
Inc(ma);
Inc(mb);
Inc(n);
end;
Result:=0;
end;
procedure _TIFFmemset(p: Pointer; v: Integer; c: Longint); cdecl;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -