Dela via


Hantera tillståndet för ett grafikobjekt

Klassen Graphics står i centrum för GDI+. Om du vill rita något hämtar du ett Graphics objekt, anger dess egenskaper och anropar dess metoder DrawLine, DrawImage, DrawStringoch liknande).

I följande exempel anropas metoden DrawRectangle för ett Graphics objekt. Det första argumentet som skickas till metoden DrawRectangle är ett Pen objekt.

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);  

Grafiktillstånd

Ett Graphics objekt tillhandahåller mer än ritningsmetoder, till exempel DrawLine och DrawRectangle. Ett Graphics-objekt har också grafiktillstånd, som kan delas in i följande kategorier:

  • Kvalitetsinställningar

  • Transformationer

  • Urklippsregion

Kvalitetsinställningar

Ett Graphics objekt har flera egenskaper som påverkar kvaliteten på de objekt som ritas. Du kan till exempel ange egenskapen TextRenderingHint för att ange vilken typ av antialiasing (om någon) som tillämpas på text. Andra egenskaper som påverkar kvaliteten är SmoothingMode, CompositingMode, CompositingQualityoch InterpolationMode.

I följande exempel ritas två ellipser, en med utjämningsläget inställt på AntiAlias och ett med utjämningsläget inställt på 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);  

Transformationer

Ett Graphics objekt underhåller två omvandlingar (värld och sida) som tillämpas på alla objekt som ritas av det Graphics objektet. Alla affintransformeringar kan lagras i världsomvandlingen. Affintransformationer omfattar skalning, rotation, reflektion, skevning och translation. Sidtransformeringen kan användas för skalning och för att ändra enheter (till exempel bildpunkter till tum). Mer information finns i Koordinatsystem och transformeringar.

I följande exempel anges världen och sidtransformeringar för ett Graphics objekt. Världsomvandlingen är inställd på en 30-graders rotation. Sidtransformeringen anges så att koordinaterna som skickas till den andra DrawEllipse behandlas som millimeter i stället för bildpunkter. Koden gör två identiska anrop till metoden DrawEllipse. Världstransformationen tillämpas på det första DrawEllipse-anropet, och båda transformationerna (värld och sida) tillämpas på det andra DrawEllipse-anropet.

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);  

Följande bild visar de två ellipserna. Observera att 30-gradersrotationen handlar om koordinatsystemets ursprung (övre vänstra hörnet i klientområdet), inte om ellipsernas centra. Observera också att pennbredden på 1 innebär 1 pixel för den första ellipsen och 1 millimeter för den andra ellipsen.

bild som visar två ellipser: rotation och pennbredd.

Urklippsregion

Ett Graphics-objekt har en urklippsregion som gäller för alla objekt som ritas av det Graphics-objektet. Du kan ange urklippsregionen genom att anropa metoden SetClip.

I följande exempel skapas en plusformad region genom att bilda en union med två rektanglar. Den regionen är avsedd som urklippsregion för ett Graphics objekt. Sedan ritar koden två rader som är begränsade till den inre delen av urklippsområdet.

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);  

Följande bild visar de klippta linjerna:

diagram som visar det begränsade klippområdet.

Se även