Computerwissenschaften

GDI-Grafiken in Visual Basic .NET Tutorial

Mit GDI + können Sie Formen, Schriftarten, Bilder oder allgemein Grafiken in Visual Basic .NET zeichnen .

Dieser Artikel ist der erste Teil einer vollständigen Einführung in die Verwendung von GDI + in Visual Basic .NET.

GDI + ist ein ungewöhnlicher Bestandteil von .NET. Es war hier vor .NET (GDI + wurde mit Windows XP veröffentlicht) und es hat nicht die gleichen Aktualisierungszyklen wie .NET Framework. In der Microsoft-Dokumentation heißt es normalerweise, dass Microsoft Windows GDI + eine API für C / C ++ – Programmierer im Windows-Betriebssystem ist. Aber GDI + auch enthält die verwendeten Namensräume in VB.NET für Software-basierte Grafikprogrammierung.

 

WPF

Es ist jedoch nicht die einzige von Microsoft bereitgestellte Grafiksoftware, insbesondere seit Framework 3.0. Als Vista und 3.0 eingeführt wurden, wurde das völlig neue WPF damit eingeführt. WPF ist ein hardwarebeschleunigter High-Level-Ansatz für Grafiken. Wie Tim Cahill, Mitglied des Microsoft WPF-Softwareteams, mit WPF sagt: „Sie beschreiben Ihre Szene mit Konstrukten auf hoher Ebene, und wir kümmern uns um den Rest.“ Und die Tatsache, dass die Hardware beschleunigt wird, bedeutet, dass Sie den Betrieb Ihres PC-Prozessors, der Formen auf dem Bildschirm zeichnet, nicht nach unten ziehen müssen. Ein Großteil der eigentlichen Arbeit wird von Ihrer Grafikkarte erledigt.

Wir waren jedoch schon einmal hier. Jeder „große Sprung nach vorne“ wird normalerweise von ein paar Stolpern nach hinten begleitet, und außerdem wird es Jahre dauern, bis sich WPF durch die Millionen Bytes von GDI + -Code arbeitet. Dies gilt insbesondere, da WPF fast davon ausgeht, dass Sie mit einem leistungsstarken System mit viel Speicher und einer heißen Grafikkarte arbeiten. Aus diesem Grund konnten viele PCs Vista nicht ausführen (oder zumindest die Vista „Aero“ -Grafiken verwenden), als es erstmals eingeführt wurde. Daher ist diese Serie weiterhin auf der Website für alle verfügbar, die sie weiterhin benötigen.

 

Guter alter Code

GDI + kann nicht wie andere Komponenten in VB.NET auf ein Formular gezogen werden. Stattdessen müssen GDI + -Objekte in der Regel auf die alte Art hinzugefügt werden – indem Sie sie von Grund auf neu codieren! (Obwohl VB .NET eine Reihe sehr praktischer Codefragmente enthält, die Ihnen wirklich helfen können.)

Zum Codieren von GDI + verwenden Sie Objekte und deren Mitglieder aus einer Reihe von .NET-Namespaces. (Derzeit handelt es sich eigentlich nur um Wrapper-Code für Windows-Betriebssystemobjekte, die tatsächlich die Arbeit erledigen.)

 

Namespaces

Die Namespaces in GDI + sind:

System.Drawing

Dies ist der Kern-GDI + -Namensraum. Es definiert Objekte für das grundlegende Rendern ( Schriftarten. Stifte, grundlegende Pinsel usw.) und das wichtigste Objekt: Grafiken. Wir werden mehr davon in nur wenigen Absätzen sehen.

System.Drawing.Drawing2D

Auf diese Weise erhalten Sie Objekte für erweiterte zweidimensionale Vektorgrafiken. Einige von ihnen sind Verlaufspinsel, Stiftkappen und geometrische Transformationen.

System.Drawing.Imaging

Wenn Sie grafische Bilder ändern möchten, dh die Palette ändern, Bildmetadaten extrahieren, Metadateien bearbeiten usw. möchten, ist dies das, was Sie benötigen.

System.Drawing.Printing

Verwenden Sie die Objekte hier, um Bilder auf der gedruckten Seite zu rendern, mit dem Drucker selbst zu interagieren und das gesamte Erscheinungsbild eines Druckauftrags zu formatieren.

System.Drawing.Text

Sie können Sammlungen von Schriftarten mit diesem Namespace verwenden.

 

Grafikobjekt

Der Ausgangspunkt für GDI + ist das  Grafikobjekt  . Obwohl die von Ihnen gezeichneten Objekte auf Ihrem Monitor oder Drucker angezeigt werden, ist das Grafikobjekt die „Leinwand“, auf der Sie zeichnen.

Das Grafikobjekt ist jedoch auch eine der ersten Ursachen für Verwirrung bei der Verwendung von GDI +. Das Grafikobjekt ist immer einem bestimmten  Gerätekontext zugeordnet . Das erste Problem, mit dem praktisch jeder neue GDI + -Student konfrontiert ist, lautet: „Wie erhalte ich ein Grafikobjekt?“

Grundsätzlich gibt es zwei Möglichkeiten:

  1. Sie können den  e-  Ereignisparameter verwenden, der  mit dem PaintEventArgs-  Objekt an das  OnPaint- Ereignis  übergeben wird. Mehrere Ereignisse übergeben die PaintEventArgs,  und Sie können das verwenden, um auf das  Grafikobjekt zu verweisen, das bereits vom Gerätekontext verwendet wird.
  2. Sie können die  CreateGraphics-  Methode für einen Gerätekontext verwenden, um ein Grafikobjekt zu erstellen.

Hier ist ein Beispiel für die erste Methode:

Protected Overrides Sub OnPaint( _ ByVal e As System.Windows.Forms.PaintEventArgs) Dim g As Graphics=e.Graphics g.DrawString("About Visual Basic" & vbCrLf _ & "and GDI+" & vbCrLf & "A Great Team", _ New Font("Times New Roman", 20), _ Brushes.Firebrick, 0, 0) MyBase.OnPaint(e)
End Sub

Klicken Sie hier, um die Abbildung anzuzeigen

Fügen Sie dies der Form1-Klasse für eine Standard-Windows-Anwendung hinzu, um es selbst zu codieren.

In diesem Beispiel wurde bereits ein Grafikobjekt für das Formular  Form1 erstellt . Ihr Code muss lediglich eine lokale Instanz dieses Objekts erstellen und damit auf demselben Formular zeichnen. Beachten Sie, dass Ihr Code  Hebt  die  OnPaint –  Methode. Deshalb wird  MyBase.OnPaint (e)  am Ende ausgeführt. Sie müssen sicherstellen, dass das Basisobjekt (das, das Sie überschreiben) etwas anderes tut, eine Chance dazu erhält. Oft funktioniert Ihr Code ohne dies, aber es ist eine gute Idee.

 

PaintEventArgs

Sie können ein Grafikobjekt auch mithilfe des  PaintEventArgs-  Objekts abrufen , das in den Methoden OnPaint  und  OnPaintBackground  eines Formulars an Ihren Code übergeben wird  . Die  PrintPageEventArgs  in einem bestandenen  Printpage-  Ereignisse wird ein Graphics – Objekt enthält für den Druck. Es ist sogar möglich, für einige Bilder ein Grafikobjekt abzurufen. Auf diese Weise können Sie direkt auf das Bild malen, genauso wie Sie auf ein Formular oder eine Komponente malen würden.

 

Ereignishandler

Eine andere Variante der ersten Methode besteht darin, einen Ereignishandler für das Paint-  Ereignis für das Formular hinzuzufügen  . So sieht dieser Code aus:

Private Sub Form1_Paint( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.PaintEventArgs) _ Handles Me.Paint Dim g As Graphics=e.Graphics g.DrawString("About Visual Basic" & vbCrLf _ & "and GDI+" & vbCrLf & "A Great Team", _ New Font("Times New Roman", 20), _ Brushes.Firebrick, 0, 0)
End Sub

 

CreateGraphics

Die zweite Methode zum Abrufen eines Grafikobjekts für Ihren Code verwendet eine  CreateGraphics-  Methode, die mit vielen Komponenten verfügbar ist. Der Code sieht folgendermaßen aus:

Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click Dim g=Me.CreateGraphics g.DrawString("About Visual Basic" & vbCrLf _ & "and GDI+" & vbCrLf & "A Great Team", _ New Font("Times New Roman", 20), _ Brushes.Firebrick, 0, 0)
End Sub

Hier gibt es einige Unterschiede. Dies ist im  Button1.Click-  Ereignis  der  Fall, da unsere Grafiken verloren gehen, wenn sich  Form1 im Load- Ereignis neu malt  . Also müssen wir sie in einem späteren Ereignis hinzufügen. Wenn Sie dies codieren, werden Sie feststellen, dass die Grafiken verloren gehen, wenn  Form1  neu gezeichnet werden muss. (Minimieren und maximieren Sie erneut, um dies zu sehen.) Dies ist ein großer Vorteil bei der Verwendung der ersten Methode.

Die meisten Referenzen empfehlen die Verwendung der ersten Methode, da Ihre Grafiken automatisch neu gestrichen werden. GDI + kann schwierig sein!

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.