Bir Grafik Nesnesinin Durumunu Yönetme

Graphics sınıf GDI+ öğesinin merkezindedir. Herhangi bir şey çizmek için bir Graphics nesne elde eder, özelliklerini ayarlar ve yöntemlerini DrawLine, DrawImage, DrawStringve benzerlerini çağırırsınız.

Aşağıdaki örnekte bir Graphics nesnenin DrawRectangle yöntemi çağrılır. yöntemine DrawRectangle geçirilen ilk bağımsız değişken bir Pen nesnedir.

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

Grafik Durumu

Bir Graphics nesne, ve DrawRectanglegibi DrawLine çizim yöntemleri sağlamaktan daha fazlasını yapar. Nesne Graphics grafik durumunu da korur ve bu durum aşağıdaki kategorilere ayrılabilir:

  • Kalite ayarları

  • Dönüşümler

  • Kırpma bölgesi

Kalite Ayarlar

Bir Graphics nesne, çizilen öğelerin kalitesini etkileyen çeşitli özelliklere sahiptir. Örneğin, özelliği metne uygulanan antialiasing türünü (varsa) belirtecek şekilde ayarlayabilirsiniz TextRenderingHint . Kaliteyi etkileyen diğer özellikler : SmoothingMode, CompositingMode, CompositingQualityve InterpolationMode.

Aşağıdaki örnekte biri düzeltme modu, diğeri de düzeltme modu olarak ayarlanmış AntiAliasHighSpeedolmak üzere iki üç nokta çizer:

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

Dönüşümler

Nesne Graphics , bu nesne tarafından Graphics çizilen tüm öğelere uygulanan iki dönüştürmeyi (dünya ve sayfa) korur. Herhangi bir benze dönüştürme, dünya dönüşümünde depolanabilir. Benze dönüştürmeleri ölçeklendirme, döndürme, yansıtma, eğriltme ve çevirmeyi içerir. Sayfa dönüştürme, ölçeklendirme ve birimleri değiştirmek için (örneğin, pikselden inçe) kullanılabilir. Daha fazla bilgi için bkz . Koordinat Sistemleri ve Dönüşümler.

Aşağıdaki örnek, bir Graphics nesnenin dünya ve sayfa dönüşümlerini ayarlar. Dünya dönüşümü 30 derece döndürmeye ayarlanır. Sayfa dönüşümü, saniyeye DrawEllipse geçirilen koordinatların piksel yerine milimetre olarak kabul edilmesi için ayarlanır. Kod, yöntemine DrawEllipse iki özdeş çağrı yapar. Dünya dönüşümü ilk DrawEllipse çağrıya, her iki dönüştürme de (dünya ve sayfa) ikinci DrawEllipse çağrıya uygulanır.

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

Aşağıdaki çizimde iki üç nokta gösterilmektedir. 30 derece döndürmenin üç noktanın merkezleriyle ilgili değil koordinat sisteminin (istemci alanının sol üst köşesi) kaynağıyla ilgili olduğunu unutmayın. Ayrıca, 1 kalem genişliğinin ilk üç nokta için 1 piksel, ikinci üç nokta için 1 milimetre anlamına geldiğini unutmayın.

Illustration that shows two ellipses: rotation and pen width.

Kırpma Bölgesi

Nesne Graphics , o nesne tarafından Graphics çizilen tüm öğelere uygulanan bir kırpma bölgesi tutar. yöntemini çağırarak SetClip kırpma bölgesini ayarlayabilirsiniz.

Aşağıdaki örnek, iki dikdörtgenin birleşimini oluşturarak artı şeklinde bir bölge oluşturur. Bu bölge, bir Graphics nesnenin kırpma bölgesi olarak atanır. Ardından kod, kırpma bölgesinin iç kısmıyla sınırlı olan iki çizgi çizer.

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

Aşağıdaki çizimde kırpılmış çizgiler gösterilmektedir:

Diagram that shows the limited clip region.

Ayrıca bkz.