6 Aralık 2011 Salı

GDI+

GDI+(Graphical Device Interface) bize çizim imkânı sunan bir yapı. İçinde bize ekrana çizim yapmamızı sağlayacak bir takım sınıfılar içermekte.

Windows’un popüler olmasındaki sebeplerden biri de kullanıcıya arka planda yaptıklarını saklaması. Mesela işletim sistemi ekrana bir şeyler çizerken, arka planda ekran kartına çizim için bir takım emirler vermekte ve bu emirleri(istekleri) biden gizleyerek yapmakta. Yalnız bu basit gibi gözüken yapıda şöyle bir sorun var, binlerce farklı ekran kartının bulunması. Yani işletim sistemi bu farklı ekran kartlarını tanıyıp nasıl emir vere bilmekte. İşte GDI’ da burada devreye girmekte. GDI ekran kartımızın driver’ı aracılığıyla ekran kartımıza emirler verebilmekte.

Çizim işlemlerini “System.Drawing” referansının içinde yer alan Graphics sınıfı ile yapabilmekteyiz. Çizim işlemlerini Çizim yapılacak kontrolün “Paint” eventinde gerçekleştiriyoruz. Graphics sınıfına ait bir nesne oluştururken “new” anahtar kelimesi ile oluşturamıyoruz. Çünkü Graphics nesnesi bizde, çizim yapılacak yerin(Form, Panel, vb.) Graphics nesnesini istemektedir.

Örneğin ekrana bir daire çizelim, Graphics objesi bizden kalem(Pen) sınıfını ait bir obje istemekte. Kalem sınıfı bize eğim ve çizgiler oluşturmamıza sağlamakta.

Yukarıdaki kodda Aqua renginde, 6 pixel kalınlıkta bir kalem oluşturur.

Kalem objesini oluşturduktan sonra, daire şeklini oluşturabiliriz. Bunun için “DrawEllipse” metodunu kullanırız.

DrawEllipse metodu bizden bir takım parametreler istemekte. İlk parametre kalem parametresi, 2 ve 3. Parametreler formumuzun x ve y koordinatlarını belirtmekte. Ben başlangıç noktasından(0,0)’ dan itibaren çizmesini istedim. 4 ve 5. Parametreler çizilecek şeklin genişlik ve yüksekliğini belirtmekte.

Şimdi ise bu oluşturduğumuz çemberin içini doldurmakta. Bunun için Fırça(Brush) sınıfını kullanacağız. Visual Studio içerisinde bir takım fırçalar yer almakta. Örneğin; SolidBrush, TextureBrush, vb…

SolidBrush; oluşturulacak şeklini içini düz bir şekilde boyar.

TextureBrush; şeklin içini sizin belirlediğiniz resim ile doldurur.

FillEllipse metodu ile içi boyanmış bir şekilde, Formun (0,0) koordinatlarından başlayıp, formun genişlik ve yüksekliği kadar çizer.

Bu sefer de Fırça olarak TextureBrush kullanalım. TextureBrush’ ı kullanabilmemiz için bize çizilecek resmi tutan bir Bitmap sınıfı lazım.

Formumuz şu şekilde olacaktır:

Son olarak şunu belirtmek istiyorum; bütün bu çizim işlemlerini Form1’in “Paint” metodu ile gerçekleştirdik. Bunun sebeplerinden bir tanesi de şu: Eğer çizim kodlarını Formun Constructorına yerleştirip, çalıştırdığımızda şekil oluşacaktır. Fakat formu simge durumuna getirip, tekrar büyüttüğümüzde şeklin yok olduğunu görmekteyiz, bunun sebebi bu işlemde çizim ile ilgili sistem kaynaklarının boşaltılması. Bu yüzden “Paint” eventinde çizim işlemlerini gerçekleştirmekteyiz.

0 yorum:

Yorum Gönder

 
;