Freigeben über


Der Status eines Grafikobjekts

Die Graphics-Klasse ist zentraler Bestandteil von GDI+. Um ein Element zu zeichnen, verwenden Sie ein Graphics-Objekt, legen seine Eigenschaften fest und rufen die dazugehörigen Methoden (DrawLine, DrawImage, DrawString usw.) auf.

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)
[C#]
Graphics graphics = e.Graphics;
Pen pen = new Pen(Color.Blue);  // Opaque blue
graphics.DrawRectangle(pen, 10, 10, 200, 100);

Grafikstatus

Ein Graphics-Objekt erfüllt weit mehr Funktionen als nur Zeichenmethoden, wie DrawLine und DrawRectangle, bereitzustellen. Es dient darüber hinaus zur Verwaltung des Grafikstatus, 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. Weitere Eigenschaften, die sich auf die Grafikqualität beziehen, 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)
[C#]
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. Weitere affine Transformationen umfassen Skalierung, Drehung, Spiegelung, Zerrung und Übersetzung. 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 Seitentransformation und globale Transformation 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 anstatt als Pixel behandelt werden. 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)
[C#]
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.

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)
[C#]
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.