123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- {
- $Id$
- 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.
|