fpc/packages/extra/libgd/gd.pp
fpc 790a4fe2d3 * log and id tags removed
git-svn-id: trunk@42 -
2005-05-21 09:42:41 +00:00

417 lines
17 KiB
ObjectPascal

{
This file is part of the Free Pascal run time library.
Copyright (c) 1999-2000 by Michael Van Canneyt, member of
the Free Pascal development team
This file implements an interface to the gd library.
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
unit gd;
interface
{$linklib c}
{$linklib m}
{$linklib png}
{$linklib gd}
{$ifdef hasttf}
{$linklib ttf}
{$endif hasttf}
{$PACKRECORDS C}
const
libgd = 'gd';
libc = 'c';
GD_H = 1;
DEFAULT_FONTPATH = '/usr/share/fonts/truetype';
PATHSEPARATOR = ':';
gdMaxColors = 256;
type
PByte = ^Byte;
PPByte = ^PByte;
PVoid = Pointer;
PFile = Pointer;
PGDIMAGESTRUCT = ^gdImage;
gdImage = record
pixels : PPbyte;
sx : longint;
sy : longint;
colorsTotal : longint;
red : array[0..(gdMaxColors)-1] of longint;
green : array[0..(gdMaxColors)-1] of longint;
blue : array[0..(gdMaxColors)-1] of longint;
open : array[0..(gdMaxColors)-1] of longint;
transparent : longint;
polyInts : Plongint;
polyAllocated : longint;
brush : PgdImageStruct;
tile : PgdImageStruct;
brushColorMap : array[0..(gdMaxColors)-1] of longint;
tileColorMap : array[0..(gdMaxColors)-1] of longint;
styleLength : longint;
stylePos : longint;
style : Plongint;
interlace : longint;
end;
gdImageStruct = gdImage;
pgdImage = ^gdImage;
gdImagePtr = PgdImage;
gdFont = record
nchars : longint;
offset : longint;
w : longint;
h : longint;
data : Pchar;
end;
pgdFont = ^gdFont;
gdFontPtr = PgdFont;
var
{$ifndef darwin}
gdFontLarge : gdFontPtr; cvar; external;
gdFontSmall : gdFontPtr; cvar; external;
gdFontGiant : gdFontPtr; cvar; external;
gdFontMediumBold : gdFontPtr; cvar; external;
gdFontTiny : gdFontPtr; cvar; external;
{$else darwin}
gdFontLarge : gdFontPtr; external libgd name 'gdFontLarge';
gdFontSmall : gdFontPtr; external libgd name 'gdFontSmall';
gdFontGiant : gdFontPtr; external libgd name 'gdFontGiant';
gdFontMediumBold : gdFontPtr; external libgd name 'gdFontMediumBold';
gdFontTiny : gdFontPtr; external libgd name 'gdFontTiny';
{$endif darwin}
const
gdDashSize = 4;
gdStyled = -(2);
gdBrushed = -(3);
gdStyledBrushed = -(4);
gdTiled = -(5);
gdTransparent = -(6);
type
gdSource = record
source : function (context:Pointer; buffer:Pchar; len:longint):longint;cdecl;
context : pointer;
end;
pgdSource = ^gdSource;
gdSourcePtr = PgdSource;
gdSink = record
sink : function (context:Pvoid; buffer:Pchar; len:longint):longint;cdecl;
context : pointer;
end;
pgdSink = ^gdSink;
gdSinkPtr = PgdSink;
gdPoint = record
x : longint;
y : longint;
end;
pgdPoint = ^gdPoint;
gdPointPtr = PgdPoint;
pgdIOCtx = ^gdIOCtx;
gdIOCtx = record
getC : function (_para1:PgdIOCtx):longint;cdecl;
getBuf : function (_para1:PgdIOCtx; _para2:pointer; _para3:longint):longint;
putC : procedure (_para1:PgdIOCtx; _para2:longint);
putBuf : function (_para1:PgdIOCtx; _para2:pointer; _para3:longint):longint;
seek : function (_para1:PgdIOCtx; _para2:longint):longint;
tell : function (_para1:PgdIOCtx):longint;
free : procedure (_para1:PgdIOCtx);
end;
GDIOCTXPTR = pgdIOCtx;
{ Translated from gd_io.h}
function fopen(a,b:pchar):pFile; cdecl;external libc;
procedure fclose(a:pFile); cdecl;external libc;
procedure Putword(w:longint; ctx:PgdIOCtx); cdecl; external libgd;
procedure Putchar(c:longint; ctx:PgdIOCtx); cdecl; external libgd;
procedure gdPutC(c:byte; ctx:PgdIOCtx); cdecl; external libgd;
function gdPutBuf(_para1:pointer; _para2:longint; _para3:PgdIOCtx):longint; cdecl; external libgd;
procedure gdPutWord(w:longint; ctx:PgdIOCtx); cdecl; external libgd;
procedure gdPutInt(w:longint; ctx:PgdIOCtx); cdecl; external libgd;
function gdGetC(ctx:PgdIOCtx):longint; cdecl; external libgd;
function gdGetBuf(_para1:pointer; _para2:longint; _para3:PgdIOCtx):longint; cdecl; external libgd;
function gdGetByte(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd;
function gdGetWord(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd;
function gdGetInt(result:Plongint; ctx:PgdIOCtx):longint; cdecl; external libgd;
function gdSeek(ctx:PgdIOCtx; _para2:longint):longint; cdecl; external libgd;
function gdTell(ctx:PgdIOCtx):longint; cdecl; external libgd;
function gdImageCreate(sx:longint; sy:longint):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromPng(fd:PFILE):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromPngCtx(inIO:gdIOCtxPtr):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromWBMP(inFile:PFILE):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromWBMPCtx(infile:PgdIOCtx):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromJpeg(infile:PFILE):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromJpegCtx(infile:PgdIOCtx):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromPngSource(infile:gdSourcePtr):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromGd(infile:PFILE):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromGdCtx(infile:gdIOCtxPtr):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromGd2(infile:PFILE):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromGd2Ctx(infile:gdIOCtxPtr):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromGd2Part(infile:PFILE; srcx:longint; srcy:longint; w:longint; h:longint):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromGd2PartCtx(infile:gdIOCtxPtr; srcx:longint; srcy:longint; w:longint; h:longint):gdImagePtr; cdecl; external libgd;
function gdImageCreateFromXbm(fd:PFILE):gdImagePtr; cdecl; external libgd;
procedure gdImageDestroy(im:gdImagePtr); cdecl; external libgd;
procedure gdImageSetPixel(im:gdImagePtr; x:longint; y:longint; color:longint); cdecl; external libgd;
function gdImageGetPixel(im:gdImagePtr; x:longint; y:longint):longint; cdecl; external libgd;
procedure gdImageLine(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd;
procedure gdImageDashedLine(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd;
procedure gdImageRectangle(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd;
procedure gdImageFilledRectangle(im:gdImagePtr; x1:longint; y1:longint; x2:longint; y2:longint; color:longint); cdecl; external libgd;
function gdImageBoundsSafe(im:gdImagePtr; x:longint; y:longint):longint; cdecl; external libgd;
procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:longint; color:longint); cdecl; external libgd;
procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:longint; color:longint); cdecl; external libgd;
procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pbyte; color:longint); cdecl; external libgd;
procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pbyte; color:longint); cdecl; external libgd;
procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pword; color:longint); cdecl; external libgd;
procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:Pword; color:longint); cdecl; external libgd;
{$ifdef HasTTF}
function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:Pchar; ptsize:double; angle:double; x:longint; y:longint; astring:Pchar):Pchar; cdecl; external libgd;
function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:Pchar; ptsize:double; angle:double; x:longint; y:longint; astring:Pchar):Pchar; cdecl; external libgd;
{$endif hasTTF}
procedure gdImagePolygon(im:gdImagePtr; p:gdPointPtr; n:longint; c:longint); cdecl; external libgd;
procedure gdImageFilledPolygon(im:gdImagePtr; p:gdPointPtr; n:longint; c:longint); cdecl; external libgd;
function gdImageColorAllocate(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd;
function gdImageColorClosest(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd;
function gdImageColorExact(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd;
function gdImageColorResolve(im:gdImagePtr; r:longint; g:longint; b:longint):longint; cdecl; external libgd;
procedure gdImageColorDeallocate(im:gdImagePtr; color:longint); cdecl; external libgd;
procedure gdImageColorTransparent(im:gdImagePtr; color:longint); cdecl; external libgd;
procedure gdImagePaletteCopy(dst:gdImagePtr; src:gdImagePtr); cdecl; external libgd;
procedure gdImagePng(im:gdImagePtr; _out:PFILE); cdecl; external libgd;
procedure gdImagePngCtx(im:gdImagePtr; _out:PgdIOCtx); cdecl; external libgd;
procedure gdImageWBMP(image:gdImagePtr; fg:longint; _out:PFILE); cdecl; external libgd;
procedure gdImageWBMPCtx(image:gdImagePtr; fg:longint; _out:PgdIOCtx); cdecl; external libgd;
procedure gdFree(m:Pvoid); cdecl; external libgd;
function gdImageWBMPPtr(im:gdImagePtr; size:Plongint; fg:longint):pointer; cdecl; external libgd;
procedure gdImageJpeg(im:gdImagePtr; _out:PFILE; quality:longint); cdecl; external libgd;
procedure gdImageJpegCtx(im:gdImagePtr; _out:PgdIOCtx; quality:longint); cdecl; external libgd;
function gdImageJpegPtr(im:gdImagePtr; size:Plongint; quality:longint):pointer; cdecl; external libgd;
procedure gdImagePngToSink(im:gdImagePtr; _out:gdSinkPtr); cdecl; external libgd;
procedure gdImageGd(im:gdImagePtr; _out:PFILE); cdecl; external libgd;
procedure gdImageGd2(im:gdImagePtr; _out:PFILE; cs:longint; fmt:longint); cdecl; external libgd;
function gdImagePngPtr(im:gdImagePtr; size:Plongint):pointer; cdecl; external libgd;
function gdImageGdPtr(im:gdImagePtr; size:Plongint):pointer; cdecl; external libgd;
function gdImageGd2Ptr(im:gdImagePtr; cs:longint; fmt:longint; size:Plongint):pointer; cdecl; external libgd;
procedure gdImageArc(im:gdImagePtr; cx:longint; cy:longint; w:longint; h:longint; s:longint; e:longint; color:longint); cdecl; external libgd;
procedure gdImageFillToBorder(im:gdImagePtr; x:longint; y:longint; border:longint; color:longint); cdecl; external libgd;
procedure gdImageFill(im:gdImagePtr; x:longint; y:longint; color:longint); cdecl; external libgd;
procedure gdImageCopy(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint); cdecl; external libgd;
procedure gdImageCopyMerge(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint; pct:longint); cdecl; external libgd;
procedure gdImageCopyMergeGray(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; w:longint; h:longint; pct:longint); cdecl; external libgd;
procedure gdImageCopyResized(dst:gdImagePtr; src:gdImagePtr; dstX:longint; dstY:longint; srcX:longint; srcY:longint; dstW:longint; dstH:longint; srcW:longint; srcH:longint); cdecl; external libgd;
procedure gdImageSetBrush(im:gdImagePtr; brush:gdImagePtr); cdecl; external libgd;
procedure gdImageSetTile(im:gdImagePtr; tile:gdImagePtr); cdecl; external libgd;
procedure gdImageSetStyle(im:gdImagePtr; style:Plongint; noOfPixels:longint); cdecl; external libgd;
procedure gdImageInterlace(im:gdImagePtr; interlaceArg:longint); cdecl; external libgd;
{ Translated macros }
function gdImageSX(im : pgdimage) : longint;
function gdImageSY(im : pgdimage) : longint;
function gdImageColorsTotal(im : pgdimage) : longint;
function gdImageRed(im : pgdimage; c : longint): longint;
function gdImageGreen(im : pgdimage; c : longint): longint;
function gdImageBlue(im : pgdimage; c : longint): longint;
function gdImageGetTransparent(im : pgdimage) : longint;
function gdImageGetInterlaced(im : pgdimage) : longint;
function gdNewFileCtx(_para1:PFILE):PgdIOCtx; cdecl; external libgd;
function gdNewDynamicCtx(_para1:longint; _para2:pointer):PgdIOCtx; cdecl; external libgd;
function gdNewSSCtx(infile:gdSourcePtr; _out:gdSinkPtr):PgdIOCtx; cdecl; external libgd;
function gdDPExtractData(ctx:pointer; size:Plongint):pointer; cdecl; external libgd;
{overloaded pascal functions}
function fopen(a,b:string):pFile;
procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint);
procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint);
procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
{$ifdef hasttf}
function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string): string;
function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string):string;
{$endif}
const
GD2_CHUNKSIZE = 128;
GD2_CHUNKSIZE_MIN = 64;
GD2_CHUNKSIZE_MAX = 4096;
GD2_VERS = 1;
GD2_ID = 'gd2';
GD2_FMT_RAW = 1;
GD2_FMT_COMPRESSED = 2;
function gdImageCompare(im1:gdImagePtr; im2:gdImagePtr):longint;cdecl; external libgd;
const
GD_CMP_IMAGE = 1;
GD_CMP_NUM_COLORS = 2;
GD_CMP_COLOR = 4;
GD_CMP_SIZE_X = 8;
GD_CMP_SIZE_Y = 16;
GD_CMP_TRANSPARENT = 32;
GD_CMP_BACKGROUND = 64;
GD_CMP_INTERLACE = 128;
GD_RESOLUTION = 96;
implementation
function gdImageSX(im : pgdimage) : longint;
begin
gdImageSX:=im^.sx;
end;
function gdImageSY(im : pgdimage) : longint;
begin
gdImageSY:=im^.sy;
end;
function gdImageColorsTotal(im : pgdimage) : longint;
begin
gdImageColorsTotal:=im^.colorsTotal;
end;
function gdImageGetTransparent(im : pgdimage) : longint;
begin
gdImageGetTransparent:=im^.transparent;
end;
function gdImageGetInterlaced(im : pgdimage) : longint;
begin
gdImageGetInterlaced:=im^.interlace;
end;
function gdImageRed(im : pgdimage; c : longint): longint;
begin
gdImageRed:=im^.red[c];
end;
function gdImageGreen(im : pgdimage; c : longint): longint;
begin
gdImageGreen := im^.green[c];
end;
function gdImageBlue(im : pgdimage; c : longint): longint;
begin
gdImageBlue := im^.blue[c];
end;
function fopen(a,b:string):pFile;
begin
{$ifopt h+}
fopen:=fopen(pchar(a),pchar(b));
{$else}
a:=a+#0;
b:=b+#0;
fopen:=fopen(@a[1],@b[1]);
{$endif}
end;
procedure gdImageChar(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint);
begin
gdimagechar(im,f,x,y,ord(c),color);
end;
procedure gdImageCharUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; c:char; color:longint);
begin
gdimagecharup(im,f,x,y,ord(c),color);
end;
procedure gdImageString(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
begin
{$ifopt h+}
gdImageString(im,f,x,y,pbyte(pchar(s)),color);
{$else}
s:=s+#0;
gdImageString(im,f,x,y,@s[1],color);
{$endif}
end;
procedure gdImageStringUp(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
begin
{$ifopt h+}
gdImageStringUp(im,f,x,y,pbyte(pchar(s)),color);
{$else}
s:=s+#0;
gdImageStringUp(im,f,x,y,pbyte(@s[1]),color);
{$endif}
end;
procedure gdImageString16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
begin
{$ifopt h+}
gdImageString16(im,f,x,y,pword(pchar(s)),color);
{$else}
s:=s+#0;
gdImageString16(im,f,x,y,pword(@s[1]),color);
{$endif}
end;
procedure gdImageStringUp16(im:gdImagePtr; f:gdFontPtr; x:longint; y:longint; s:string; color:longint);
begin
{$ifopt h+}
gdImageStringUp16(im,f,x,y,pword(pchar(s)),color);
{$else}
s:=s+#0;
gdImageStringUp16(im,f,x,y,pword(@s[1]),color);
{$endif}
end;
{$ifdef hasttf}
function gdImageStringTTF(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string): string;
begin
{$ifopt h+}
gdImageStringTTF:=strpas(gdImageStringTTF(im,brect,fg,pchar(fontlist),ptsize,angle,x,y,pchar(astring)));
{$else}
fontlist:=fornlist+#0;
astring:=astring+#0;
gdImageStringTTF:=strpas(gdImageStringTTF(im,brect,fg,@fontlist[1],ptsize,angle,x,y,@astring[1]));
{$endif}
end;
function gdImageStringFT(im:PgdImage; brect:Plongint; fg:longint; fontlist:string; ptsize:double; angle:double; x:longint; y:longint; astring:string):string;
begin
{$ifopt h+}
gdImageStringFT:=strpas(gdImageStringFT(im,brect,fg,pchar(fontlist),ptsize,angle,x,y,pchar(astring)));
{$else}
fontlist:=fornlist+#0;
astring:=astring+#0;
gdImageStringFT:=strpas(gdImageStringFT(im,brect,fg,@fontlist[1],ptsize,angle,x,y,@astring[1]));
{$endif}
end;
{$endif}
end.