Bir Grafik Nesnesinin Durumunu Yönetme

sınıfı, Graphics bu sınıfın GDI+. Herhangi bir şey çizmek için bir nesnesi elde eder, özelliklerini ayarlar ve yöntemini Graphics DrawLine , , ve DrawImage DrawString benzerini çağırabilirsiniz).

Aşağıdaki örnek bir DrawRectangle nesnenin yöntemini Graphics çağıran. yöntemine geçirilen ilk bağımsız DrawRectangle 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

Bir Graphics nesne, ve gibi çizim yöntemlerini sağlamaktan daha fazlasını DrawLine DrawRectangle yapar. Nesne Graphics ayrıca grafik durumunu da sürdürür 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, TextRenderingHint metne uygulanan antialiasing türünü (varsa) belirterek belirtebilirsiniz. Kalitesini etkileyen diğer özellikler SmoothingMode , CompositingMode , ve CompositingQuality InterpolationMode özellikleridir.

Aşağıdaki örnek, biri düzleştirme modu olarak ayarlanmış ve biri de düzleştirme modu olarak ayarlanmış iki AntiAlias üç nokta HighSpeed ç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 çizilen tüm öğelere uygulanan iki dönüştürme (dünya ve sayfa) Graphics sürdürür. Tüm affine dönüşümleri dünya dönüşümünde depolanmış olabilir. Affine dönüştürmeleri ölçeklendirmeyi, döndürmeyi, yansıtmayı, skewing'i ve çeviriyi içerir. Sayfa dönüştürme, ölçeklendirme ve birimleri değiştirmek (örneğin pikselden inçe) için kullanılabilir. Daha fazla bilgi için bkz. Koordinat Sistemleri ve Dönüşümler.

Aşağıdaki örnek, bir nesnenin dünya ve sayfa dönüşümlerini Graphics ayarlar. Dünya dönüşümü 30 derece döndürmeye ayarlanır. Sayfa dönüşümü, ikinciye geçirilen koordinatların piksel yerine milimetre DrawEllipse olarak kabul edilmesi için ayarlanır. Kod, yöntemine iki aynı çağrı DrawEllipse yapar. Dünya dönüşümü ilk çağrıya DrawEllipse uygulanır ve her iki dönüştürme de (dünya ve sayfa) ikinci çağrıya DrawEllipse 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österilmiştir. 30 derece döndürmenin üç noktanın merkezleriyle ilgili değil, koordinat sisteminin kaynağı hakkında olduğunu (istemci alanı sol üst köşesi) unutmayın. Ayrıca, 1 kalem genişliğinin ilk üç nokta için 1 piksel, ikinci üç nokta için ise 1 milimetre anlamına geldiğini unutmayın.

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

Kırpma Bölgesi

Bir Graphics nesne, o nesne tarafından çizilen tüm öğeler için geçerli olan bir kırpma bölgesi Graphics sağlar. yöntemini çağırarak kırpma bölgelerini SetClip ayarlayabilirsiniz.

Aşağıdaki örnek, iki dikdörtgenin birlemini şekillendirerek artı şeklinde bir bölge oluşturur. Bu bölge, bir nesnenin kırpma bölgesi olarak Graphics belirlenmiştir. Ardından kod, kırpma bölgesi iç bölgesiyle kısıtlanmış iki satır ç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österilmiştir:

Sınırlı klibin bölgeyi gösteren diyagram.

Ayrıca bkz.