Makale Özeti

Bu yazımızda GDI+ dilinde temel sınıf olarak görülen Graphics sınıfını incelemeye çalıştık.

Makale

Yeniden merhaba 5 ay gibi uzun bir süre

    Yeniden merhaba 5 ay gibi uzun bir süre "Yazgeliştir" ailesinden uzak kaldık Ama şimdi yeni yazılarımla sizlerle beraberim. İlk yazım GDI+ teknolojisi hakındaki yazımın devamı niteliğinde olacak. Ancak kendimi bir konuda eleştirmek istiyorum. Yazılarımda bir eksiklik vardır. Hem grafik çizim dili diyorsunuz. Onlarca satır kod yazıyorsunuz. "Bakın bunu derlerseniz bu şekil çıkar" diye göstermiyorsunuz büyük eksiklikti. Bu ve bundan sonraki yazılarımda bu eksikleri gidermeye çalışacağız.

    System.Drawing Namespacei içindeki bazı sınıflar ve işlevleri aşağıdaki tabloda verilmiştir.

Sınıf İşlevi
            Bitmap

Adından da  anlaşılacağı gibi bitmap türü resimlerin program içinde ifade edilmesinde bu sınıftan faydalanılarak bir nesne oluşturulur. Nesnenin görüntüsü adı geçen bitmap resim olacaksa özellik, metot ve olayları da bitmap sınıfından yola çıkılarak tanımlanır.

            Brush

 Sınıfın özellikleri Türkçe anlamından farklı değildir. GD+ ile çizdiğimiz şekillerin boşluklarını doldurmak için kullanılan Fırça nesnesini temsil eder. Öyle ki çizimi yapan nesnenin tercihe göre fırça işlevini yapacak nesneye de  ihtiyacı olacaktır.

            Font

Bir Metni yazmak için kullanılan font özelliklerini barındıran nesnedir. Çesitli namespacelerden gelen sınıfların da yardımıyla bu nesne esas alınarak oluşturulan yazıya efekt uygulanabilir.

            Graphics Çizim nesnesidir.
            Pen Çizgi ve eğrileri çizen nesnedir.
            Solidbrush Anlamı Brush nesnesinden farklı değildir. Ancak  tanımlanan nesneye tek renk kullanma özelliği verir.

    Şimdi de isterseniz bu sınıflara ait metot ve özellikleri örneklerle açıklayalım. Şunu söylemek isterim ki GDI+ kavramını bir küre olarak kabul ederseniz bana göre bu kürenin merkezinde "Graphics" sınıfı yatmaktadır. Çünkü esas olarak çizimi yapan graphics sınıfının oluşturduğu nesnelerdir. Diğer sınıfların ve namespacelerin oluşturduğu nesneler bu sınıfın oluşturduğu nesnenin işlevselliğini arttırmak için varolur.

İlk örneğimizde bir form üzerine bir dikdörtgen çizelim;

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

Dim g As Graphics = e.Graphics

Dim k As Pen = New Pen(Color.Pink, 10)

g.DrawEllipse(k, 100, 100, 50, 50)

End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.FormBorderStyle = FormBorderStyle.None

Me.WindowState = FormWindowState.Maximized

Me.BackColor = Color.White

End Sub

 

Bu Kodu derlediğimizde  Aşağıdaki şekil karşımıza çıkacaktır.

Eğer Kodu analiz edersek öncelikle formun "load" olayında ihtiyacımız olan rahat bir görüntü alanı hazırlanıyor. Daha sonra  formun "onpaint" metodunda  bir grafik nesnesi "g" ve bir kalem nesnesi "k" tanımlanıyor.  grafik nesnesinin "Drawellipse" metodu kullanılarak gerekli parametreler de verilerek (kalem ,x1,x2,y1,y2 gibi...) çizim gerçekleştirilir.

Şimdi sizlere Graphics nesnesinin diğer metotlarını bir tablo halinde vermek istiyorum.

Metot İşlevi
     Drawarc(k, x, y, with, height) Bir Yay Çizer(x ve y yayın merkezi diğer 2 parametre ise yayın şeklini belirler. with ve height eşitse bu yay bir çembere aittir.
     DrawLine  Başlangıç ve bitiş noktası belli bir doğru çizer
     Drawpie Daire diliminin dış sınırlarını doldurur.
     DrawPolygon Çokgen çizer
     DrawString  Bir string ifade oluşturur.
     FillEllipse Elipsin içini doldurur
     FillPie bir daire dilimi oluşturur.
     FillPolygon İçi dolu bir çokgen oluşturur. Bütü

Bunlar sadece bazıları sadece başka namespacelere ihtiyaç duymadan oluşturulabilecek grafik çizim metotları.

Daha iyi anlaşılabilmesi için isterseniz biraz da örnek yapalım.

Yukarıdaki metotlara ait bir uygulama örneği aşağıda görülüyor.

Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint

Dim g As Graphics = e.Graphics

Dim k As Pen = New Pen(Color.Black, 1)

g.DrawArc(k, 10, 10, 70, 50, 0, 100)

End Sub

Private Sub PictureBox2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox2.Paint

Dim g As Graphics = e.Graphics

Dim k As Pen = New Pen(Color.White, 1)

g.DrawLine(k, 0, 0, 100, 100)

End Sub

Private Sub PictureBox3_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox3.Paint

Dim g As Graphics = e.Graphics

Dim k As Pen = New Pen(Color.Black, 1)

Dim rect As RectangleF = New RectangleF(10, 10, 75, 75)

g.DrawPie(k, rect, 100, 100)

End Sub

Private Sub PictureBox4_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox4.Paint

Dim g As Graphics = e.Graphics

Dim k As Pen = New Pen(Color.Black, 1)

g.DrawRectangle(k, 10, 20, 30, 40)

End Sub

Private Sub PictureBox5_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox5.Paint

Dim g As Graphics = e.Graphics

Dim k As Pen = New Pen(Color.Black, 1)

Dim f As Font = New Font(Font.FontFamily.GenericSerif, 10, FontStyle.Italic, GraphicsUnit.Millimeter, 12)

Dim b As SolidBrush = New SolidBrush(Color.Red)

g.DrawString("Tarık", f, b, 10, 30)

End Sub

Private Sub PictureBox6_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox6.Paint

Dim g As Graphics = e.Graphics

Dim k As Pen = New Pen(Color.Black, 1)

Dim b As SolidBrush = New SolidBrush(Color.White)

g.FillEllipse(b, 20, 20, 50, 75)

End Sub

Private Sub PictureBox7_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox7.Paint

Dim g As Graphics = e.Graphics

Dim k As Pen = New Pen(Color.Black, 1)

Dim b As SolidBrush = New SolidBrush(Color.LightSkyBlue)

Dim rect As Rectangle = New Rectangle(10, 10, 75, 75)

g.FillPie(b, rect, 100, 100)

End Sub

Private Sub PictureBox8_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox8.Paint

Dim f As TextureBrush

Dim g As Graphics = Me.CreateGraphics

Dim resim As Image = New Bitmap("C:\a.jpg")

f = New TextureBrush(resim)

g.FillEllipse(f, 1, 1, 220, 180)

End Sub

 

Bu Kodları derlediğimiz taktirde  Aşağıdaki Çıktıyı almamız mümkündür.

Kodları incelediğiniz zaman daha iyi anlayacaksınız. Şimdilik bu kadar. Eğer içinden çıkamadığınız yada çıkmaya vakit bulamadığınız yada araştırılmasını istediğiniz bir konu varsa bana yazın mutlaka bir şeyler buluruz. Görüşmek üzere

 

Tarık Gökhan Kızılırmak
tarikgokhan@hotmail.com