Delphi

Werbung
Delphi
Grafikprogrammierung
Ein Vortrag von Thomas Götze und Karsten Wolf
Problem:
Wie kann ein Bild oder eine reale Situation in den Speicher eines
Computers abgebildet (digitalisiert) werden?
Möglichkeit 1 - Pixelgrafik:
Möglichkeit 2 - Vektorgrafik:
Aufbau des Bildes (Rasterung) aus
Punktobjekten gleicher Größe, sog.
Pixel.
Aufbau des Bildes aus Grafikobjekten
variabler Größe und Form
(Vektorisierung).
Jedes Pixel hat bestimmte
Eigenschaften (Attribute), z. B. xPosition, y-Position oder Farbe, die mit
Werten belegt werden.
Jedes Objekt kann durch Anweisungen
(Prozeduren), z.B. Zeichne Linie im
Winkel 45°, 200 Einheiten lang, und
Eigenschaften (Attribute), z.B.
Linienbreite oder Farbe, beschrieben
werden.
Theoretische Grundlagen
Das Canvas-Objekt
Das Koordinatensystem
Linien und Stifte
Farben, Muster und Pinsel
Grundlegende Zeichenfunktionen
Koordinatentransformation
Das Canvas- Objekt
Ein zentrales Objekt der Grafikausgabe mit Delphi ist immer
eine Zeichenfläche (Leinwand) der Klasse TCanvas.
Um Grafiken auf dem Bildschirm auszugeben,
wird eine Komponente benötigt, welche die
Eigenschaft Canvas besitzt, also eine
Zeichenfläche. Zu diesen Komponenten gehören
die Forms (die späteren Windows-Fenster), die
Paintbox, die Image-Komponente und der
Drucker. Am einfachsten zu benutzen ist davon
die Image-Komponente, weil man sich bei dieser
nicht um das Wiederherstellen der Zeichnung
kümmern muss, wenn z.B. die Größe des Fensters
verändert oder dieses von einem anderen Fenster
überlagert wurde. Wir werden sie deshalb fast
immer benutzen.
TCanvas stellt Eigenschaften, Ereignisse und Methoden
zur Verfügung, die beim Erzeugen von Bildern hilfreich
sind, indem sie:
• die Art des verwendeten Pinsels und Stiftes sowie die
Schriftart festlegen.
• eine Vielzahl von Formen und Linien zeichnen und füllen.
• Text ausgeben.
• Grafiken zeichnen.
• eine Reaktion auf Änderungen am aktuellen Bild
ermöglichen.
Einige Delphikomponenten enthalten diese „Leinwand“,
auf der gezeichnet werden kann.
Am einfachsten zu benutzen ist die Image-Komponente
(unter zusätzlich).
Im TCanvas-Objekt sind noch folgende Objekte enthalten:
Canvas.Pen



Pen.Width
Pen.Color
Pen.Style
Canvas.Brush


Brush.Color
Brush.Style
Canvas.Font




Font.Name
Font.Color
Font.Style
Font.Size
Beispiel:
Der Schrift einer Image-Komponente
wird rot zugewiesen.
Form1.Image1.Canvas.Font.Color:=
clRed;
Das Koordinatensystem
F
Canvas.Width =Form1.clientwidth
0,0
Canvas.Height
Canvas.ClientHeight
0,0
Image1.Top
Image1.Left
I
Image1.ClientHeight
Image1.ClientWidth
!!!Positive y-Werte werden nach unten abgetragen!!!!
Beispiel: Zentrierung der Image-Komponente innerhalb
eines Formulars.
Image1.left:=(Form1.clientwidth – Image1.width) div 2;
Image1.top:=(Form1.clientheight – Image1.Height) div 2
Farben, Muster und Pinsel
Windows verwaltet die Farben über das RGB
(Rot – Grün – Blau )-Modell.
Die Farbe kann u.a. über die ColorDialog – Komponente
auswählen.
Delphi besitzt aber auch zahlreiche vordefinierte Farben,
welche mit dem Kürzel cl beginnen.
clRed
Rot
clBlack
Schwarz
clSilver
Silbergrau
clGreen
Grün
ColorDialog
- Colordialog – Komponente aus Register Dialoge wählen.
- Aufruf des Dialoges zur Laufzeit mit der Execute – Methode.
- ColorDialog1.Execute;
-Den Rückgabewert verwenden:
-Image1.Canvas.Brush.Color:=Colordialog1.Color;
Füllungen
Brush.Style
Brush.Color
bsSolid
bsClear
bsBDiagonal
bsFDiagonal
bsCross
bsDiagCross
bsHorizontal
bsVertical
Linien und Stifte
Eigenschaft
Objekt
Beschreibung
Linienbreite
Pen.Width ...in Pixeln
Linientyp
Pen.Style
... nur wenn Pen.Width =1
Pen.Style
psSolid
psDash
psDot
psDashDot
psDashDotDot
psClear
Grundlegende
Zeichenfunktionen
Punkt
Punkte werden mit Hilfe der Pixel – Eigenschaft gesetzt.
x->
0,0
y
Canvas.Pixels[x,y]:=farbe;
Canvas.Pixels[7,9]:=clBlack;
Bem.: Farbe kann somit auch gelesen werden:
var farbe: TColor;
farbe:= Canvas.Pixels[7,9];
Linie
Zuerst wird der Startpunkt mit MoveTo festgelegt. Gezeichnet
wird von dieser Position mit LineTo, die den Endpunkt
bestimmt.
Canvas.MoveTo(x1,y1); Canvas.LineTo(x2,y2);
x2,y2
x1,y1
Image1.Canvas.MoveTo(10,10); Canvas.LineTo(100,100)
Kreis, Ellipse
Es werden die linke obere und die rechte untere Ecke des
umrahmenden Rechtecks festgelegt.
Der Kreis wird als Spezialfall der Ellipse angesehen.
Canvas.Ellipse(x1,y1,x2,y2)
x1,y1
x2,y2
Oder Kreis mit Mittelpunkt x1, y1 und Radius r:
canvas.ellipse(x1-r,y1-r,x1+r,y1+r)
Rechteck
Canvas.Rectangle(x1,y1,x2,y2)
x1,y1
x2,y2
abgerundetes Rechteck
Die Ecken werden als Ellipsenviertel der Breite x3 und der
Höhe y3 dargestellt. Ist Brush.Stile <>bsClear, wird das
Rechteck mit dem aktuellen Pinsel gefüllt.
Canvas.RoundRect(x1,y1,x2,y2,x3,y3:Integer;
x1,y1
y3
x3
x2,y2
canvas.Roundrect(10,10,100,100,10,5);
Segment
x3,y3
x1,y1
x2,y2
x4,y4
Die Methode Pie zeichnet ein Segment, das durch eine
Ellipse und zwei Linien begrenzt wird. Für Brush.Style<>
bsClear wird das Segment gefüllt.
Canvas.Pie(x1,y1,x2,y2,x3,y3,x4,y4);
Canvas.Pie(0,0,500,400,0,250,400);
Bogenstück
x1,y1
x3,y3
x2,y2
x4,y4
Die Methode Arc zeichnet nur den Bogen, nicht die
Verbindungen zum Ellipsenmittelpunkt. Keine Füllung.
Canvas.Arc(x1,y1,x2,y2,x3,y3,x4,y4)
Kreisstück
x3,y3
x1,y1
x2,y2
x4,y4
Mit der Chord-Methode wird der Teil des Kreises gezeichnet,
der durch eine Sehne abgeteilt ist.
Canvas.Chord(x1,y1,x2,y2,x3,y3,x4,y4)
Mehrfachlinie
x2,y2
x5,y5
x1,y1
x4,y4
x3,y3
Ähnlich zur Linie, werden jedoch mehrere Punkte auf einmal
übergeben.
Canvas.Polyline([Point(x1,y1), Point(x2,y2).......]);
N-Eck (Polygon)
x3,y3
x2,y2
x1,y1
.....
x4,y4
Mit der Polygon-Methode kann ein gefülltes n-Eck gezeichnet
werden.
Canvas.Polygon([Point(x1,y1), Point(x2,y2).....]);
Texte
Die Methode TextOut ist die einfachste Methode, einen
Text auf den Bildschirm zu bringen.
Canvas.TextOut(x,y,Text);
Canvas.TextOut(100,100,‘Wort‘);
Konvertieren der Koordinaten
Probleme:
Der Ursprung des math. Koordinatensystems liegt meist
in der Mitte des beschriebenen Blattes, auf dem Bildschirm
liegt er in der linken oberen Ecke des Canvas.
Die y-Achse ist beim math. Koord.s. nach oben gerichtet,
auf dem Bildschirm aber nach unten.
Die Längeneinheit ist in m. Ks. durch das Intervall von
Null bis Eins gegeben, auf dem Bildschirm beträgt sie
ein Pixel.
1
y
Canvas
x
1
y1
1
yp
y0
1
x0:=image1.width Div 2;
y0:= image1.Hight Div 2;
x1:= x0+x0 div 3;
y1:= y0-y0 div 3;
x0
xp
x1
y1
1
yp
1
y
y0
1
x
1
x0
xp
x xp  x0

 xp  x   x1  x0   x0
1 x1  x0
y yp  y 0

 yp  y   y1  y 0  y 0
1 y1  y 0
x1
Anwendungsbeispiele
Standardfunktionen
Funktion
Quellen
Programmieren lernen in Borland Delphi 6
Hanser Verlag
Herunterladen