Suchen und Finden
Service
Infos und Kontakt
16 Grafikprogrammierung (GDI+) (S. 832-833)
Dieses ziemlich lange Kapitel führt in die Grafikprogrammierung mit GDI+ ein. GDI+ steht für Graphics Device Interface und ist der Teil der .NET-Bibliothek, der für die Ausgabe von Linien, Mustern etc. in Fenstern, Steuerelementen und am Drucker verantwortlich ist.
16.1 Einführung 832
16.2 Elementare Grafikoperationen 840
16.3 Text ausgeben (Font-Klassen) 867
16.4 Bitmaps, Icons und Metafiles 894
16.5 Interna und spezielle Programmiertechniken 915
16.1 Einführung
Die Grafikprogrammierung in VB.NET basiert auf der .NET-Bibliothek System.Drawing (Datei System.Drawing.dll). Diese Bibliothek gibt in .NET den Zugang zum neuen GDI+ System. GDI steht für Graphics Device Interface und umfasst Funktionen zur Ausgabe und Verwaltung zweidimensionaler Grafiken (Punkte, Linien, Rechtecke, Vielecke etc.), zum Umgang mit Text und Schriftarten, zur Manipulation von Bitmaps, zur Erzeugung von Metafiles (Dateien mit Grafikobjekten) etc.
GDI+ würde genug Stoff geben, um ein eigenes Buch zu schreiben. Da an dieser Stelle aber nur Platz für ein Kapitel ist, beschränkt sich dieses Kapitel auf die Grundbegriffe, auf eine Einführung in die wichtigsten Klassen sowie auf eine Reihe von Beispielprogrammen. Das Kapitel schafft damit ein Fundament, das Ihnen die weitere Erforschung von GDI+ erleichtern soll.
In diesem Kapitel steht der System.Drawing-Namensraum im Mittelpunkt. Klassen der anderen Namensräume werden aus Platzgründen nur ansatzweise beschrieben. Informationen zum Ausdruck von Daten stehen im Mittelpunkt von Kapitel 17. Dort werden Sie sehen, dass es viele Ähnlichkeiten zwischen der Ausgabe am Bildschirm (d.h. in einem Formular oder PictureBox-Steuerelement) und der Ausgabe am Drucker gibt.
Verwendung der System.Drawing-Bibliothek
Damit Sie die System.Drawing-Bibliothek in Ihrem Programm benutzen können, muss das Projekt einen Verweis darauf enthalten. Beim Projekttyp VISUAL BASIC PROJEKT/WINDOWSANWENDUNG ist das automatisch der Fall, bei anderen Projekttypen kann es aber sein, dass Sie diesen Verweis selbst einrichten müssen (PROJEKT/VERWEIS HINZUFÜGEN). Bei einer VB.NET-Windows-Anwendung gilt außerdem per Default der Import System.- Drawing (siehe PROJEKT/EIGENSCHAFTEN/ALLG. EIGENSCHAFTEN/IMPORTE). Deswegen können Sie im Code alle Klassen von System.Drawing unmittelbar ansprechen, ohne jedes Mal System. Drawing voranzustellen. Der gesamte Code in diesem Kapitel setzt diesen Defaultimport voraus. Wenn das nicht der Fall ist, müssen Sie am Beginn der Codedatei Imports System.Drawing einfügen.
16.1.1 Ein erstes Beispiel
Das folgende Programm zeichnet einige einfache geomentrische Formen direkt in ein Formular. Die Programmausführung beginnt in Form1_Load, wo das Point-Feld pts mit einigen Zufallskoordinaten initialisiert wird. (Diese Initialisierung kann nicht in Form1_- Paint erfolgen, weil das daraus resultierende Polygon sonst ständig seine Form ändern würde.)
Die Ereignisprozedur Form1_Paint wird in der Folge immer dann aufgerufen, wenn der Fensterinhalt neu gezeichnet werden soll. Das ist ziemlich oft der Fall: jedes Mal, wenn verdeckte Teile des Fensters wieder sichtbar werden, wenn die Größe des Fensters verändert wird etc.
Die Grundidee von Grafik in VB.NET-Formularen lautet so: Einmal ausgegebene Grafiken werden nicht gespeichert (etwa in einer Bitmap). Stattdessen wird das Programm jedes Mal, wenn Teile der Grafik neu gezeichnet werden müssen, durch eine Ereignisprozedur benachrichtigt. Das Programm muss also zu jedem Zeitpunkt in der Lage sein, den Fensterinhalt neu zu zeichnen.
An die Paint-Ereignisprozedur werden zwei Parameter übergeben, von denen hier aber nur e interessant ist. Diese Variable (Klasse PaintEventArgs) enthält Informationen darüber, was eigentlich neu gezeichnet werden soll:
• e.Graphics verweist auf ein System.Drawing.Graphics-Objekt. Alle Grafikmethoden müssen auf dieses Objekt angewandt werden. Um die ständige Wiederholung von e.Graphics zu vermeiden, verwendet das Beispielprogramm die Variable g als Platzhalter. (Für alle, die sich schon mit dem Vorgänger von GDI+, also mit GDI beschäftigt haben:
Das Graphics-Objekt hat in GDI+ eine vergleichbare Funktion wie der Device Context (DC) in GDI.)
- e.ClipRectangle verweist auf ein System.Drawing.Rectangle-Objekt, das angibt, welche Bereiche des Fensters neu gezeichnet werden müssen. Diese Information wird oft (wie im Beispielprogramm) ignoriert. Stattdessen wird einfach alles neu gezeichnet. Nähere Informationen zur Bedeutung von ClipRectangle folgen in Abschnitt 16.5.3.
Der Rest des Beispielprogramms ist relativ einfach nachzuvollziehen: Alle Grafikmethoden setzen ein System.Drawing.Graphics-Objekt voraus, das durch die Variable gr gegeben ist. Außerdem muss bei den meisten Grafikmethoden eine Zeichenfarbe durch ein Pen- Objekt oder eine Füllfarbe (oder ein Füllmuster) durch ein Brush-Objekt angegeben werden. Daher werden zwei entsprechende Objekte erzeugt: ein blauer Zeichenstift mit einer Breite von zwei Pixeln sowie ein rotes Füllmuster.
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.; Ersparnis im Vergleich zur Printversion























