Lazarus/Computer-Graphik
Nach soviel Mathematik und Formeln wäre jetzt vielleicht ein kleines Kontrastprogramm angebracht. In den alten Zeiten der Computerei wurden fast immer nur Zahlen und Buchstaben auf Papier ausgegeben. Kreative Leute machten selbst daraus kleine Kunstwerke. Heute sind fast alle Computer aus dem Anwenderbereich graphikfähig und auch Lazarus kann recht gut mit einfacher Graphik umgehen.
Inhaltsverzeichnis
Die TImage-Komponente und ihre "Leinwand" (Canvas)
Eine Lazarus-Komponente speziell zur Manipulation von Graphiken ist die Komponente TImage. Um sich das Arbeiten mit dieser Komponente besser vorstellen zu können, stellen wir uns einen echten Künstler und sein Werkzeug vor: Eine Leinwand (engl.: Canvas), einen dazu passenden Bleistift (engl.: Pen) zum Zeichnen von Formen und einen Pinsel (engl.: Brush) zum Ausmalen der Flächen. Etwas seltsam ist dabei, dass in Lazarus Bleistift und Pinsel Eigenschaften der Leinwand sind; wir stellen uns vor, sie wären daran angebunden, damit sie nicht im hektischen Kunstbetrieb verloren gehen.
Bei den folgenden Beispielen gehen wir davon aus, dass es auf dem Bildschirm eine Komponente image1 gibt, deren Eigenschaft Canvas wir ansprechen.
Farben, Stile und Strichdicken
Sowohl der Stift als auch der Pinsel haben eine Farbe als auch einen "Stil". Der Stift hat außerdem eine Dicke.
Befehl | Wirkung |
---|---|
image1.canvas.Pen.Color:=Farbe; | Setzt die Stiftfarbe |
image1.canvas.Brush.Color:=Farbe; | Setzt die Pinselfarbe |
image1.canvas.Pen.Style:=Stil; | Setzt den Stift-Stil |
image1.canvas.Brush.Style:=Stil; | Setzt den Pinsel-Stil |
image1.canvas.Pen.Width:=Breite; | Setzt die Breite der Linien |
Es gibt eine Reihe vorgefertigter Farben und Stile. Die wichtigsten:
Farbname | Farbe |
---|---|
clBlack | Schwarz |
clWhite | Weiß |
clRed | Rot |
clGreen | Grün |
clBlue | Blau |
clYellow | Gelb |
clAqua | Cyan |
clFuchsia | Magenta |
Das sind natürlich nur sehr wenige, ausgewählte Farben. In Lazarus ist es aber auch möglich, alle nur überhaupt auf dem Bildschirm denkbaren Farben darzustellen. Hierzu muss man sich darüber klar sein, dass alle Bildschirmfarben mit drei Zahlenwerten beschrieben werden können. Diese Werte stehen für die Farben Rot, Grün und Blau und liegen im Bereich zwischen 0 und 255.
Befehl | Wirkung |
---|---|
image1.canvas.Pen.Color:=RGBToColor(r,g,b); | Setzt die Stiftfarbe auf die durch die Zahlen r,g und b beschriebene Farbe. |
Die Farbe "durchsichtig" gibt es in Lazarus so nicht. Die Sichtbarkeit- bzw. Nicht-Sichtbarkeit von Linien und Füllungen wird über "Stile" geregelt:
Stil-Befehl | Bedeutung |
---|---|
psSolid | Durchgezogene Linie |
psClear | Unsichtbare Linie |
bsSolid | Durchgefärbte Füllung |
bsClear | Unsichtbare Füllung |
Löschen
Befehl | Wirkung |
---|---|
image1.canvas.clear; | Färbt die Leinwand einheitlich in der Farbe des Pinsels (Brush). Es kann sein, dass in Ausnahmefällen die Färbung stattdessen schwarz wird. Möglicherweise handelt es sich dabei um einen Programmierfehler in Lazarus. Abhilfe lässt sich dadurch schaffen, den clear-Befehl zweimal hintereinander auszuführen). |
Punkte und Linien
Befehl | Wirkung |
---|---|
image1.canvas.pixels[x,y]:=Farbe; | Setzt das Pixel mit den Koordinaten x und y auf die entsprechende Farbe. |
image1.canvas.line(x1,y1,x2,y2); | Zeichnet eine Linie vom Punkt (x1,y1) zum Punkt (x2,y2). Die Farbe ist die PenColor des Canvas. |
Formen
Befehl | Wirkung |
---|---|
Image1.Canvas.Rectangle(x1,y1,x2,y2) | Zeichnet ein Rechteck mit den Eckpunkten (x1,y1) und (x2,y2) |
Image1.Canvas.Ellipse(x1,y1,x2,y2) | Zeichnet eine Ellipse umgrenzt von dem (unsichtbaren) Rechteck mit den Eckpunkten (x1,y1) und (x2,y2) |
Schreiben auf der Leinwand
Befehl | Wirkung |
---|---|
Image1.Canvas.TextOut(x,y,Text); | Schreibt den Text an die Koordinaten (x,y). Brush.Color bildet dabei die Hintergrundfarbe. |
Ein Beispiel
Das folgende Beispiel ist ein (sehr bescheidener) Versuch, mit dem Computer ein Bild zu malen. Es benötigt eine Image-Komponente mit dem Namen image1 mit einer Höhe von 400 Pixeln oder mehr und einer Breite von 600 Pixeln oder mehr und einen Button1.
1 unit bild;
2 {$mode objfpc}{$H+}
3 interface
4
5 uses
6 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
7 ExtCtrls,LazIOStuff;
8
9 type
10 { TForm1 }
11
12 TForm1 = class(TForm)
13 Button1: TButton;
14 Image1: TImage;
15 procedure Button1Click(Sender: TObject);
16 private
17 { private declarations }
18 public
19 { public declarations }
20 end;
21
22 var
23 Form1: TForm1;
24 i : integer;
25
26
27 implementation
28
29 {$R *.lfm}
30 { TForm1 }
31
32 procedure TForm1.Button1Click(Sender: TObject);
33 begin
34 // Hintergrund
35 Image1.Canvas.Brush.Color:=clBlack;
36 Image1.Canvas.Brush.Style:=bsSolid;
37 Image1.Canvas.Clear;
38 Image1.Canvas.Clear; // zweimal, wenn's beim ersten Mal nicht funktioniert
39
40 // Zwei einsame Schneeflocken
41 Image1.Canvas.Pixels[100,300]:=clWhite;
42 Image1.Canvas.Pixels[240,200]:=clWhite;
43
44 // Haus
45 Image1.Canvas.Pen.Color:=clBlue;
46 Image1.Canvas.Pen.Width:=3;
47 Image1.Canvas.Brush.Color:=clGray;
48
49 Image1.Canvas.Rectangle(200,300,300,380);
50 Image1.Canvas.Line(180,320,250,220);
51 Image1.Canvas.Line(320,320,250,220);
52
53 // Sonne
54 Image1.Canvas.Pen.Style:=psClear;
55 Image1.Canvas.Brush.Color:=clYellow;
56 Image1.Canvas.Ellipse(550,50,600,100);
57
58 // Schrift
59 Image1.Canvas.TextOut(100,380,'Das Haus in der Sonne');
60
61 end;
62
63
64 end.
- Einführung
- Technisches
- Komponenten, Eigenschaften, Ereignisse
- Computer-Mathematik
- Verzweigungen
- Spielen mit dem Zufall
- Schleifen
- Computer-Graphik
- Geschachtelte Verzweigungen und Verzweigungen in Schleifen
- Prozeduren, Funktionen und Bibliotheken
- Felder (Arrays)
- Zeichen (Char) und Zeichenkette (String)
- Dateien
- Graphische Komponenten