Freigeben über


Verwalten des Zustands eines Graphics-Objekts

Die Graphics-Klasse ist eine zentrale Komponente von GDI+. Zum Zeichnen rufen Sie ein Graphics-Objekt ab, legen seine Eigenschaften fest und rufen die zugehörigen Methoden auf (DrawLine, DrawImage, DrawString u. ä.).

Im folgenden Beispiel wird die DrawRectangle-Methode eines Graphics-Objekts aufgerufen. Als erstes Argument wird ein Pen-Objekt an die DrawRectangle-Methode übergeben.

Dim graphics As Graphics = e.Graphics
Dim pen As New Pen(Color.Blue) ' Opaque blue
graphics.DrawRectangle(pen, 10, 10, 200, 100)
Graphics graphics = e.Graphics;
Pen pen = new Pen(Color.Blue);  // Opaque blue
graphics.DrawRectangle(pen, 10, 10, 200, 100);

Grafikstatus

Ein Graphics-Objekt stellt nicht nur Zeichenmethoden wie DrawLine und DrawRectangle bereit. Das Graphics-Objekt dient darüber hinaus zur Verwaltung des Grafikzustands, der in die folgenden Kategorien untergliedert werden kann:

  • Qualitätseinstellungen

  • Transformationen

  • Clippingbereich

Qualitätseinstellungen

Ein Graphics-Objekt verfügt über mehrere Eigenschaften, die die Qualität der gezeichneten Elemente beeinflussen. Sie können beispielsweise die TextRenderingHint-Eigenschaft festlegen, um den auf Text angewendeten Antialiasingtyp (falls vorhanden) anzugeben. Andere Eigenschaften, die die Qualität beeinflussen, sind SmoothingMode, CompositingMode, CompositingQuality und InterpolationMode.

Im folgenden Beispiel werden zwei Ellipsen gezeichnet: eine mit dem Glättungsmodus AntiAlias und eine andere mit dem Glättungsmodus HighSpeed:

Dim graphics As Graphics = e.Graphics
Dim pen As New Pen(Color.Blue)
      
graphics.SmoothingMode = SmoothingMode.AntiAlias
graphics.DrawEllipse(pen, 0, 0, 200, 100)
graphics.SmoothingMode = SmoothingMode.HighSpeed
graphics.DrawEllipse(pen, 0, 150, 200, 100)
Graphics graphics = e.Graphics;
Pen pen = new Pen(Color.Blue);

graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawEllipse(pen, 0, 0, 200, 100);
graphics.SmoothingMode = SmoothingMode.HighSpeed;
graphics.DrawEllipse(pen, 0, 150, 200, 100);

Transformationen

Durch ein Graphics-Objekt werden zwei Transformationen verwaltet (die globale Transformation und die Seitentransformation), die auf alle von diesem Graphics-Objekt gezeichneten Elemente angewendet werden. In der globalen Transformation können alle affinen Transformationen gespeichert werden. Zu den affinen Transformationen gehören Skalierung, Drehung, Spiegelung, Zerrung und Verschiebung. Die Seitentransformation kann zum Skalieren sowie zum Ändern von Maßeinheiten (z. B. von Pixel in Zoll) verwendet werden. Weitere Informationen finden Sie unter Koordinatensysteme und Transformationen.

Im folgenden Beispiel werden die globale Transformation und die Seitentransformation eines Graphics-Objekts festgelegt. Die globale Transformation wird auf einen Drehwinkel von 30 Grad eingestellt. Die Seitentransformation wird so definiert, dass die an die zweite DrawEllipse-Methode übergebenen Koordinaten als Millimeter behandelt werden und nicht als Pixel. Der Code enthält zwei identische Aufrufe der DrawEllipse-Methode. Die globale Transformation wird lediglich auf den ersten DrawEllipse-Aufruf angewendet, während auf den zweiten DrawEllipse-Aufruf beide Transformationen (globale Transformation und Seitentransformation) angewendet werden.

Dim graphics As Graphics = e.Graphics
Dim pen As New Pen(Color.Red)
      
graphics.ResetTransform()
graphics.RotateTransform(30) ' world transformation
graphics.DrawEllipse(pen, 0, 0, 100, 50)
graphics.PageUnit = GraphicsUnit.Millimeter ' page transformation
graphics.DrawEllipse(pen, 0, 0, 100, 50)
Graphics graphics = e.Graphics;
Pen pen = new Pen(Color.Red); 

graphics.ResetTransform();
graphics.RotateTransform(30);                    // world transformation
graphics.DrawEllipse(pen, 0, 0, 100, 50);
graphics.PageUnit = GraphicsUnit.Millimeter;     // page transformation
graphics.DrawEllipse(pen, 0, 0, 100, 50);

In der folgenden Abbildung sind die beiden Ellipsen dargestellt. Beachten Sie, dass die 30-Grad-Drehung um den Ursprung des Koordinatensystems (obere linke Ecke des Clientbereichs) und nicht um die Mittelpunkte der Ellipsen erfolgt. Außerdem bedeutet die Stiftbreite 1, dass für die erste Ellipse 1 Pixel und für die zweite Ellipse 1 Millimeter verwendet wird.

Ovale

Clippingbereich

Durch das Graphics-Objekt wird ein Clippingbereich verwaltet, der für alle von diesem Graphics-Objekt gezeichneten Elemente gültig ist. Der Clippingbereich kann durch Aufrufen der SetClip-Methode festgelegt werden.

Im folgenden Beispiel wird ein Bereich in Form eines Pluszeichens gebildet, indem zwei Rechtecke zusammengeführt werden. Dieser Bereich wird als Clippingbereich eines Graphics-Objekts bezeichnet. Anschließend werden durch den Code zwei Linien gezeichnet, die auf den Innenbereich des Clippingbereichs beschränkt sind.

Dim graphics As Graphics = e.Graphics
      
' Opaque red, width 5
Dim pen As New Pen(Color.Red, 5)
      
' Opaque aqua
Dim brush As New SolidBrush(Color.FromArgb(255, 180, 255, 255))
      
' Create a plus-shaped region by forming the union of two rectangles.
Dim [region] As New [Region](New Rectangle(50, 0, 50, 150))
[region].Union(New Rectangle(0, 50, 150, 50))
graphics.FillRegion(brush, [region])
      
' Set the clipping region.
graphics.SetClip([region], CombineMode.Replace)
      
' Draw two clipped lines.
graphics.DrawLine(pen, 0, 30, 150, 160)
graphics.DrawLine(pen, 40, 20, 190, 150)
Graphics graphics = e.Graphics;

// Opaque red, width 5
Pen pen = new Pen(Color.Red, 5);  

// Opaque aqua
SolidBrush brush = new SolidBrush(Color.FromArgb(255, 180, 255, 255));  

// Create a plus-shaped region by forming the union of two rectangles.
Region region = new Region(new Rectangle(50, 0, 50, 150));
region.Union(new Rectangle(0, 50, 150, 50));
graphics.FillRegion(brush, region);

// Set the clipping region.
graphics.SetClip(region, CombineMode.Replace);

// Draw two clipped lines.
graphics.DrawLine(pen, 0, 30, 150, 160);
graphics.DrawLine(pen, 40, 20, 190, 150);

In der folgenden Abbildung sind die abgeschnittenen Linien dargestellt.

Beschränkter Clip-Bereich

Siehe auch

Konzepte

Verwenden geschachtelter Grafikcontainer

Weitere Ressourcen

Grafik und Zeichnen in Windows Forms