Delphi Grafikprogrammierung Ein Vortrag von Thomas Götze und Karsten Wolf.

Post on 05-Apr-2015

143 views 2 download

transcript

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:

Aufbau des Bildes (Rasterung) aus Punktobjekten gleicher Größe, sog. Pixel.

Jedes Pixel hat bestimmte Eigenschaften (Attribute), z. B. x-Position, y-Position oder Farbe, die mit Werten belegt werden.

Möglichkeit 2 - Vektorgrafik:

Aufbau des Bildes aus Grafikobjekten variabler Größe und Form (Vektorisierung).

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

Grundlegende Zeichenfunktionen

Farben, Muster und Pinsel

Linien und Stifte

Koordinatentransformation

Das Canvas- Objekt

Ein zentrales Objekt der Grafikausgabe mit Delphi ist immereine 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).

Canvas.Pen Pen.Width Pen.Color Pen.Style

Im TCanvas-Objekt sind noch folgende Objekte enthalten:

Canvas.Brush Brush.Color Brush.Style

Canvas.Font Font.Name Font.Color Font.Style Font.Size

Beispiel:Der Schrift einer Image-Komponentewird rot zugewiesen.Form1.Image1.Canvas.Font.Color:=clRed;

Das Koordinatensystem

FC a nva s.Wid th

C a nva s.He ig ht

C a nva s.C lie ntHe ig ht

0,0

=Form1.clientwidth

Im a g e 1.To p

Im a g e 1.Le ft

Im a g e 1.C lie ntWid th

I

Im a g e 1.C lie ntHe ig ht

0,0

!!!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 PinselWindows verwaltet die Farben über das RGB(Rot – Grün – Blau )-Modell.

Die Farbe kann u.a. über die ColorDialog – Komponenteauswä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üllungenBrush.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

PunktPunkte werden mit Hilfe der Pixel – Eigenschaft gesetzt.

Canvas.Pixels[x,y]:=farbe;

0,0x->

y

Canvas.Pixels[7,9]:=clBlack;

Bem.: Farbe kann somit auch gelesen werden:var farbe: TColor;farbe:= Canvas.Pixels[7,9];

LinieZuerst wird der Startpunkt mit MoveTo festgelegt. Gezeichnet wird von dieser Position mit LineTo, die den Endpunktbestimmt.

Canvas.MoveTo(x1,y1); Canvas.LineTo(x2,y2);

x2,y2

x1,y1

Image1.Canvas.MoveTo(10,10); Canvas.LineTo(100,100)

Kreis, EllipseEs werden die linke obere und die rechte untere Ecke desumrahmenden Rechtecks festgelegt.Der Kreis wird als Spezialfall der Ellipse angesehen.

Canvas.Ellipse(x1,y1,x2,y2)

x1,y1

x2,y2Oder 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 RechteckDie Ecken werden als Ellipsenviertel der Breite x3 und derHö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

x2,y2

x3

y3

canvas.Roundrect(10,10,100,100,10,5);

Segmentx1,y1

x2,y2

x3,y3

x4,y4Die Methode Pie zeichnet ein Segment, das durch eineEllipse 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ückx1,y1

x2,y2

x3,y3

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ückx1,y1

x2,y2

x3,y3

x4,y4Mit 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

x1,y1

x2,y2

x3,y3x4,y4

x5,y5

Ähnlich zur Linie, werden jedoch mehrere Punkte auf einmalübergeben.Canvas.Polyline([Point(x1,y1), Point(x2,y2).......]);

N-Eck (Polygon)

x1,y1

x2,y2

x3,y3

x4,y4

.....

Mit der Polygon-Methode kann ein gefülltes n-Eck gezeichnetwerden.Canvas.Polygon([Point(x1,y1), Point(x2,y2).....]);

TexteDie Methode TextOut ist die einfachste Methode, einenText auf den Bildschirm zu bringen.

Canvas.TextOut(x,y,Text);

Canvas.TextOut(100,100,‘Wort‘);

Konvertieren der KoordinatenProbleme:

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

1

x

yCanvas

1

1

y1

yp

y0

x0 xp x1

x0:=

x1:=

y0:=image1.width Div 2;image1.Hight Div 2;

y1:=

x0+x0 div 3;

y0-y0 div 3;

1

1

x

y

1

1

y1

yp

y0

x0 xp x1

00101

0

1xxxxxp

xx

xxpx

00101

0

1yyyyyp

yy

yypy

Anwendungsbeispiele

Funktion

Standardfunktionen

Quellen

Programmieren lernen in Borland Delphi 6Hanser Verlag