Posts Tagged :

gdi

GDI 2 _ Grafik Çizimi 426 487 mezo

GDI 2 _ Grafik Çizimi

Merhaba arkadaşlar

GDI ile ilgili önceki yazımızda neyin nasıl kullanılacağını görmüştük bu sefer bu GDI metotlarını kullanarak nasıl hesaplamalar yaparız. Seçim sonuçlarında hep görürüz bir pasta dilimi üzerinde partilerin oyları görünür ve yüzde olarak pasta grafikde bir dilim kaplarlar . Bakalım bizim partilerden hangisi ne kadar oyla pastanın neresinde duracak ???

Öncelikle WindowsForm uygulamamız üzerine 2 TextBox 1 Button ve 1 PictureBox atıyoruz.

Bu görüntüyü elde ettikten sonra yapmamız gerek pek de birşey kalmadı aslında sadece kod bloğunu açıp yazmak kalıyor 😀

string[] partiler = new string[10];int[] oylar = new int[10];int siraNo, toplamOy;

Öncelikle yukardaki gibi değerlerimi tutacağım dizilerimi  ve hesaplama yapabilmek içinse değişkenlerimi GLOBAL olarak tanımladım.

Daha sonra buton içersinde değerlerimi alıp bunları grafiksel olarak picturebox içersine çizdireceğim.

Öncelikle 10 elemanlı bir dizi oluşturduğum için dizinin boyutundan çok eleman girilmesin diye bir kontrol yapıyorum. Ardından oylar içersine değer eklerken int değerlerin girildiğinden emin oluyorum…

            if (siraNo == 10){MessageBox.Show(“10 partiden fazla olamaz???”);return;}try

{

oylar[siraNo] = int.Parse(textBox2.Text);

}

catch (Exception)

{

MessageBox.Show(“Oylarda Hata Var”);

return;

}

 

Hem partiler hemde oylar aynı indeks numaralarına yazdırılacak .

            partiler[siraNo] = textBox1.Text;toplamOy += oylar[siraNo];siraNo++;Graphics grp = this.pictureBox1.CreateGraphics();grp.Clear(pictureBox1.BackColor);

Random rnd = new Random();

int i, basAci=0,yayAci ,boy=0;

Color renk;

HatchBrush firca;

Toplam oy sayısını hesaplıyoruz.  Ardından nesnelerimizi tanımlıyoruz.  Picturebox üzerine çizim yapabilmek için Graphics nesnesi oluşturuyoruz. Picturebox da ne varsa siliyoruz. Color değişkeni ve desenli çizim için HatchBrush nesnesi oluşturuyoruz.

Index numarasına göre tüm dizi içersindeki elemanları alıp grafiksel olarak çizebilmek için bir for döngüsü oluşturuyoruz.

            for (i = 0; i <= siraNo-1; i++){yayAci = 360 * oylar[i] / toplamOy;renk = Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255));firca = new HatchBrush((HatchStyle)rnd.Next(50), renk);grp.FillPie(firca,0,80,200,200,basAci,yayAci);

 

grp.DrawString(“% ” + boy.ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 5, 80 + i * 20);

grp.FillRectangle(firca, 260, 80 + i * 20, 18, 18);

 

grp.DrawString(partiler[i] + ” = ” + oylar[i].ToString(), new Font(“Tahoma”, 8, FontStyle.Bold), Brushes.Black, 290, 80 + i * 20);

basAci += yayAci;

}

 

Çizdireceğimiz FillPie nesnesinin kaç derecelik bir açı ile çizileceğini hesaplamak için yay _aci değişkenini kullanacağız.  Random renk elde edebilmek için Color.FromArgb metodunu kullanarak rastgele renk değerlerini veriyoruz. HatchBrush üzerindede random olarak desen gelebilmesi için gerekli tanımlamayı yapıyoruz. Ardından küçük bir kare rengin hangi partiye ait olduğunu göstermek için hemen yanınada partinin adı ve oy sayısı  yazdırdıktan sonra en son tanımladığım başlangıç açısı bas_Aci değişkenini çizdiğim şeklin yay_Aci değeri kadar arttırıp yeni çizilecek olan pie için başlangıç konumunu belirliyoruz.

Ve son olarak karşımıza çıkan görüntü :

Böylelikle Graphics nesnesindeki değerlerin nasıl işimize yarayacağı biraz daha kafamızda oturmuş olur umarım…

Görüşmek Üzere.

M.Zeki OSMANCIK

GDI 401 376 mezo

GDI

Merhaba arkadaşlar

GDI  = Graphical Design Interface  ile ilgili ufak bir bilgi vermek istiyorum sizlere. GDI, Windows uygulamaları üzerinde çizim işlemleri gerçekleştirmemize olanak tanıyan sınıflardır.

Bu sınıflar ile Windows formlar üzerine veya print nesneleri ile kağıt üzerine bazı çizimler yapabilmemiz mümkün.

Öncelikle bir çizim yapabilmek için de ilk gereken bir kağıt yada çizim yapılacak alandır öncelikle bunu belirtmemiz gerekiyor

Form üzerine çizim yapabilmek için:Graphics grp = this.CreateGraphics();

 

PictureBox üzerine çizim yapabilmek için:

Graphics grp = pictureBox1.CreateGraphics();

 

Çizim alanımızı oluşturduktan sonra ile form veya picturebox üzerine ne çizdireceğimizi seçmemiz gerekiyor ama bunu seçmeden öncede çizmek için gerekli olan kalem veya içi dolu bir şekil çizeceksek fırça gerekiyor. Bunu da şu şekilde tanımlayabiliriz;

Pen kalem = new Pen(Color.Blue);kalem.Width = 5;

 

Brush firca = new SolidBrush(Color.Red) ;

 

Bu şekilde tanımladığımızda kalem ve fircanin özelliklerini değiştirebilir durumda oluyoruz. Kalemin kalınlığı vs gibi özelliklerini ayarlayabiliyoruz. Ya bunlara ihtiyacımız yoksa bunlarla uğraşmadan nasıl yaparız derseniz onun çözümüde şu şekilde…

Pens.Blue 

Brushes.Red

 

Hemen belirteyim bu şekilde kullanım tek başına mümkün olmuyor ancak gerekli kodlar içersinde bu şekilde kullanabilirsiniz biraz aşağıda bunun örneklerini göreceksiniz zaten 😉

Çizim alanı tamam kalem tamam firça tamam eee ne kaldı geriye ??? Sadece çizmek kaldı 😉

Çizim yapabilmek içinde ilk başta örneğini (instance) aldığımız Graphics nesnesini kullanacağız. Ve içersindeki çizim metotları ile form üzerine şekiller çizeceğiz….

grp.DrawLine(Pen nesnesi, X1, Y1, X2, Y2);grp.DrawLine(kalem, 50, 50, 150, 50);

Formun üzerine Line çizerken verilen koordinatlar 2 tane x ve y noktalarıdır bu iki noktayı belirtiriz ve DrawLine metodu bizim yerimize bu iki noktayı birleştirir ve şekildeki gibi bir görüntü ortaya çıkar.

Birde Dikdörtgen Yuvarlak bişiler çizelim.

grp.DrawEllipse(Pen nesnesi, X, Y, Genişlik, Yükseklik);grp.DrawEllipse(kalem, 100, 100, 100, 100);

 

grp.DrawRectangle(Pen nesnesi, X, Y, Genişlik, Yükseklik);

grp.DrawRectangle(Pens.Blue, 200, 100, 100, 100);

 

Bu şekilleri çizerkende gerekli olan veriler önce bir kalem sonra X ve Y noktası ardından çizilecek olan şeklin yükseklik ve genişlik bilgileridir.

Son olarak Pie yani kekden bahsetmek istiyorum 😀 evet sizi keklemiyorum pasta grafik olarak adlandırdımız şekli nasıl çizeriz ona bakalım…

grp.DrawPie(Pen nesnesi, X, Y, Genişlik,Yükseklik , Başlangıç Açısı, Yay Açısı); 

grp.DrawPie(kalem, 50, 200, 100, 100, 0, 270);

Şimdi birde bunların içi dolu olanları nasıl yazılıyor aralarında ne fark var görelim 😉

grp.FillEllipse(firca, 100, 100, 100, 100);grp.FillRectangle(firca, 200, 100, 100, 100);

grp.FillPie(Brushes.Purple, 50, 200, 100, 100, 0, 270);

 

 

 

GDI nesnesi sadece bu işemi yarar diyebilirsiniz 😀 Bu sadece başlangıç bir sonraki yazıda GDI nin asıl nasıl kullanılabildiğini göreceğiz 😉

Görüşmek Üzere…

 

 

    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.