|
![ein Kapitel weiter](../weiter.gif)
gdImageSetPixel
Die Grundlegen Form einer jeden Grafikbibliothek ist SetPixel. Diese
Funktion setzt einen einzelnen Pixel an der gewünschten Position
in der gewünschten Farbe.......
red=gdImageColorAllocate(image,255,0,0);
gdImageSetPixel(image,50,50,red)
Hier wird an der Position x=50 und y=50 ein roter Pixel gesetzt. Der Null-Punkt
liegt wie bei allen Zeichenfunktionen in GD linksoben.
gdImageLine, gdImageDashedLine
Die Funktion wie man ein Linie zeichnet haben sie bereits schon kennen gelernt....
gdImageLine(image,0,0,150,150,red); //(image,x1,y1,x2,y2,farbe)
Hier ziehen wir zum Beispiel ein rote Linie von der linken oberen Ecke (0,0)
zur Position 150,150, was eine diagonale Linie ist.
Genauso verwenden können sie die Funktion gdImageDashedLine, womit
sie eine gestrichelte
Linie ziehen. Eine andere Möglichkeit gestrichelte oder gepunktete Linien zu
ziehen haben sie im Kapitel zuvor, mit der Funktion gdImageSetStyle gesehen.
Hier nochmals ein Anwendungsbeispiel der 3 Funktionen........
/*Download:gd8.c*/
#include <stdio.h>
#include <gd.h>
int main()
{
/*image initialisieren*/
gdImagePtr image;
FILE *png,*jpeg;
int black, white, red, green, grey, blue;
int i;
/*Neues Image erstellen*/
image = gdImageCreate(100,100);
if(image==NULL) { /*Fehler*/ exit(0); }
white=gdImageColorAllocate(image,255,255,255);
black=gdImageColorAllocate(image,0,0,0);
image->transparent=white;
for(i=0; i<50; i++)
gdImageSetPixel(image,i,50,black);
gdImageLine(image,0,25,99,25,black);
gdImageDashedLine(image,0,75,99,75, black);
png = fopen("bild9.png","wb");
gdImagePng(image,png);
fclose(png);
gdImageDestroy(image);
return 0;
}
|
Und so siehts aus :
![Bild Nummer 9](bild9.png)
gdImageRectangle
Diese Funktion haben wir schon mehr als einmal in Aktion gesehen.
Mit dieser Funktion Zeichnen sie ein Rechteck von der linken oberen Ecke
(x1,y1) zur rechten unteren Ecke (x2,y2) in einer bestimmten Farbe.....
gdImageRectangle(image,x1,y1,x2,y2,farbe);
Alternativ für die Farbe können sie auch gdBrushed, gdStyled,
gdStyledBrushed, gdTiled verwenden.
gdImageFilledRectangle
Mit gdImageFilledRectangle wird ein Rechteck gezeichnet, genauso wie mit
gdImageRectangle,
nur das hier die Farbe nicht die Randfarbe darstellt sondern die Füllfarbe.
Sehr gut dazu eignen würde sich auch gdTiled........
gdImageFilledRectangle(image,x1,y1,x2,y2,fuellfarbe);
Mit dem GD-Modul ist es auch möglich Polygone zu zeichnen. Darauf will
ich aber nicht so genau eingehen. Nur die einzelnen Funktionen..........
gdImagePolygon, gdImageFilledPolygon
Um ein Polygon zu zeichnen müssen sie diese erst mal anlegen.....
polygon=gdImageCreate(100,100); //neues Polygon
Nun können sie die einzelnen Polygonpunkte (x,y) festlegen....
gdPoint punkte[4];
punkt[0].x=0;
punkt[0].y=0;
punkt[1].x=50;
punkt[1].y=40;
punkt[2].x=30;
punkt[2].y=80;
punkt[3].x=0;
punkt[3].y=0;
Wird das Polygon durch den letzten Vertex nicht geschlossen,
schließt die Methode es für Sie. Sowohl reale Farbindizes als
auch die Spezialfarben gdBrushed, gdStyled und gdStyledBrushed und
gdTiled können angegeben werden.
filledPolygon funktioniert dabei wieder ganze genauso wie polygon, nur
mit ein Füllfarbe als Farbangabe anstatt einen Rahmen um das Polygon.
Hier ein Beispiel wie sie Polygone zeichnen können..........
/*Download:gd9.c*/
#include <stdio.h>
#include <gd.h>
int main()
{
/*image initialisieren*/
gdImagePtr image;
FILE *png,*jpeg;
int black, white, red, green, grey, blue;
gdPoint punkte[4];
/*Neues Image erstellen*/
image = gdImageCreate(100,100);
if(image==NULL) { /*Fehler*/ exit(0); }
white=gdImageColorAllocate(image,255,255,255);
black=gdImageColorAllocate(image,0,0,0);
red =gdImageColorAllocate(image,255,0,0);
image->transparent=white;
punkte[0].x=0;
punkte[0].y=0;
punkte[1].x=50;
punkte[1].y=40;
punkte[2].x=30;
punkte[2].y=80;
punkte[3].x=0;
punkte[3].y=0;
gdImageFilledPolygon(image, punkte, 4, red);
png = fopen("bild11.png","wb");
gdImagePng(image,png);
fclose(png);
gdImageDestroy(image);
return 0;
}
|
Und so siehts aus :
![Bild Nummer 11](bild11.png)
Weiter Funktionen für Polygone entnehmen sie bitte bei Bedarf aus
der Dokuemtation von der GD-Library.
gdImageArc
Mit arc können sie Bögen, Kreise und Elipsen zeichnen.......
gdImageArc(image,50,50,30,30,0,360,farbe);
Die ersten beiden Zahlen (50,50) stellen das Zentrum da, wo sie die Zirkelspitze
einstecken (wenn sie so wollen). Die nächsten beiden Maße (30,30) stellen die
Höhe und Weite des Kreises, Bogens oder Ellipse da (in unserem Fall ein Kreis).
Die nächsten beiden Werte sind der Startpunkt (0) und Endpunkt (360) unseres
Kreises, Bogens oder Ellipse. Die Bedeutung der Farbe ist die gleiche wie immer.
Auch hierzu ein kurzes Beispiel......
/*Download:gd10.c*/
#include <stdio.h>
#include <gd.h>
int main()
{
/*image initialisieren*/
gdImagePtr image;
FILE *png;
int black, white, red, green, grey, blue;
/*Neues Image erstellen*/
image = gdImageCreate(100,100);
if(image==NULL) { /*Fehler*/ exit(0); }
white=gdImageColorAllocate(image,255,255,255);
black=gdImageColorAllocate(image,0,0,0);
red =gdImageColorAllocate(image,255,0,0);
image->transparent=white;
gdImageArc(image,30,50,25,25,0,360,black);
gdImageArc(image,45,50,25,25,0,360,red);
gdImageArc(image,60,50,25,25,0,360,black);
gdImageArc(image,45,50,60,40,0,360,red);
png = fopen("bild12.png","wb");
gdImagePng(image,png);
fclose(png);
gdImageDestroy(image);
return 0;
}
|
Und so siehts aus :
![Bild Nummer 12](bild12.png)
gdImagFill, gdImageFillToBorder
gdImageFill haben wir ebenfalls schon sehr oft verwendet.
Diese Methode füllt (Flood-Fill) Bereiche mit der angegebenen Farbe.
Die Farbe breitet sich dabei beginnend bei Punkt (x,y) aus, bis
sie durch ein Pixel in einer vom Ausgangs-Pixel verschiedenen
Farbe gestoppt wird (entspricht dem "Farbeimer", den man in vielen
Zeichenprogrammen findet). Sie können eine normale Farbe oder die
Spezialfarbe gdTiled zum Flood-Fill mit Mustern verwenden.
Neu hingegen dürfte für Sie gdImageFillToBorder sein. Hierbei können sie die
Farbe festlegen bei der das Füllen enden soll. Mit gdImageFill wurde ja das
füllen beendet sobald irgendeine ander Farbegefunden wurde.
Wollen wir das ganze doch mal an unserem Beispiel mit dem Kreisen
zuvor anwenden............
/*Download:gd11.c*/
#include <stdio.h>
#include <gd.h>
int main()
{
/*image initialisieren*/
gdImagePtr image;
FILE *png;
int black, white, red, green, grey, blue;
/*Neues Image erstellen*/
image = gdImageCreate(100,100);
if(image==NULL) { /*Fehler*/ exit(0); }
white=gdImageColorAllocate(image,255,255,255);
black=gdImageColorAllocate(image,0,0,0);
red =gdImageColorAllocate(image,255,0,0);
image->transparent=white;
gdImageArc(image,30,50,25,25,0,360,black);
gdImageArc(image,45,50,25,25,0,360,red);
gdImageArc(image,60,50,25,25,0,360,black);
gdImageArc(image,45,50,60,40,0,360,red);
gdImageFillToBorder(image,45,50,red,black);
gdImageFillToBorder(image,30,50,black,red);
gdImageFillToBorder(image,60,50,black,red);
gdImageFillToBorder(image,45,35,red,black);
png = fopen("bild13.png","wb");
gdImagePng(image,png);
fclose(png);
gdImageDestroy(image);
return 0;
}
|
So siehts aus :
![Bild Nummer 13](bild13.png)
![ein Kapitel weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|