Grafik Nesnesinin Durumunu Yönetme

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

Aşağıdaki örnek, bir Graphics nesnesinin DrawRectangle yöntemini çağırır. DrawRectangle yöntemine geçirilen ilk bağımsız değişken bir Pen nesnesidir.

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

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

  • Kalite ayarları

  • Dönüşümleri

  • Kırpma bölgesi

Kalite Ayarları

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

Aşağıdaki örnekte, biri yumuşatma modu AntiAlias, diğeri ise yumuşatma modu HighSpeedolarak ayarlanmış iki elips ç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üşümleri

Graphics nesnesi, bu Graphics nesnesi tarafından ç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. Affine dönüşümler ölçeklendirme, döndürme, yansıtma, eğriltme ve taşıma işlemlerini 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 nesnesinin dünya ve sayfa dönüşümlerini ayarlar. Dünya dönüşümü 30 derece dönüşe ayarlanmış. Sayfa dönüşümü, ikinci DrawEllipse'a geçen koordinatların piksel yerine milimetre olarak kabul edilmesini sağlamak için ayarlanmıştır. Kod, DrawEllipse yöntemine iki özdeş çağrı yapar. Dünya dönüşümü ilk DrawEllipse çağrısına uygulanır ve iki dönüştürme de (dünya ve sayfa) ikinci DrawEllipse çağrısına 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 elips gösterilmektedir. 30 derece döndürmenin koordinat sisteminin başlangıç noktası (müşteri alanının sol üst köşesi) etrafında olduğunu, elipslerin merkezleri etrafında olmadığını 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.

İki elipsi gösteren çizim: döndürme ve kalem genişliği.

Kırpma Bölgesi

Graphics nesnesi, bu Graphics nesnesi tarafından çizilen tüm öğelere uygulanan bir kırpma bölgesine sahip olur. SetClip yöntemini çağırarak 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, Graphics nesnesinin kırpma bölgesi olarak belirlenir. 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:

Sınırlı kırpma bölgesini gösteren diyagram.

Ayrıca bkz.