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.
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.
- Windows Forms'da
Grafik ve Çizim - İç İçe Grafik Kapsayıcıları Kullanma
.NET Desktop feedback