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.
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:
Se även
.NET Desktop feedback