msHOWTO

C# da çizim işlemleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# da çizim işlemleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

11 Nisan 2012 Çarşamba

C# GDI Örnek - Dönen Dikdötgenler

Merhaba arkadaşlar bu örneğimizde merkez noktaları aynı olan dikdörtgenlerin döndürülmesini sağlayan uygulama yapacağız.Öncelikle formunuza bir adet buton ve bir adet timer ekleyin.Butonun ismini buttonDonekDikdortgen olarak ayarlayın.Timer in ismini de timerDikdörtgen olarak ayarlayın .Ve son olarak aşağıdaki kodları yazın.





        private void buttonDonekDikdortgen_Click(object sender, EventArgs e)
        {
            timerDikdortgen.Start();
            rnd = new Random();
        }

        int aci = 0;
        Random rnd;
        private void timerDikdortgen_Tick(object sender, EventArgs e)
        {
            this.Refresh();
            Graphics g = this.CreateGraphics();

            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

// üstteki kod satırı çizimlerin daha yumuşak hatlı ve daha kaliteli olmasını sağlar.


            Color renk = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));


            Pen kalem = new Pen(renk, 2.0f);

            g.TranslateTransform(-250, -200, System.Drawing.Drawing2D.MatrixOrder.Prepend);
            g.RotateTransform(aci, System.Drawing.Drawing2D.MatrixOrder.Append);
            g.TranslateTransform(250, 200, System.Drawing.Drawing2D.MatrixOrder.Append);
            g.DrawRectangle(kalem, 100, 100, 300, 200);
            aci += 1;
        }


Güzel bir görüntü oluşuyor.Timer ın interval özelliğini değiştirerek istediğimiz hızda görüntü oluşturabiliriz.



C# GDI ile Atom Çizdirmek

Merhaba arkadaşlar.Bu örneğimde atamon şeklini çizen bir uygulamanın kodlarını sizlerle paylaşacağım.GDI mantığını anlamak için güzel bir örnektir.

Formunuza 1 adet button ve 1 adet timer yerleştirin. button un click olayına timer1.start(); yazın ve timer1 in tick olayına aşağıdaki kodları yazın ...


if (aci == 270)
            {
                this.Refresh();
                aci = 0;
            }


            Graphics g = this.CreateGraphics();
            Pen kalem = new Pen(Color.Blue, 2.0f);
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.TranslateTransform(-200, -150, System.Drawing.Drawing2D.MatrixOrder.Prepend);
            g.RotateTransform(aci, System.Drawing.Drawing2D.MatrixOrder.Append);
            g.TranslateTransform(200, 150, System.Drawing.Drawing2D.MatrixOrder.Append);
            g.DrawEllipse(kalem, 100, 100, 200, 100);
            aci += 45;

            g.FillEllipse(Brushes.Black, 190, 140, 20, 20);




C# GDI Kullanımı 3 Açılı Çizim Yapmak

Merhaba arkadaşlar.Bundan önceki GDI ile ilgili makalelerimde size elimden geldiğince GDI sınıfını ve mantığını anlatmaya çalıştım.Fakat o makalelerimde verdiğim örnekler ve sizlere anlattığım bilgilerle ancak ve ancak tek düze çizimler yapabiliyorduk.Fakat bu makalemde sizlere yapacağınız çizimleri dilediğiniz açıda nasıl çizebileceğinizi anlatacağım.Umarım faydalı olur ...

Eğer açılı çizim yapmak istiyorsanız uymanız gereken bir takım kurallar vardır.
-Öncelikle her zaman ki gibi çizim alanını belirtmeniz gerekir.
-Belirtilen alanın sol üst noktasının X ve Y koordinatları formunuzun (0,0) noktasına taşımanız gerekir.Yalnız en önemli noktalardan birisi taşıma işlemi yapılırken formun (0,0) noktasıyla tuvalin X Y koordinatlarının farkı verilir.Çok önemlidir.Sakın unutmayın direk (0,0) noktasını vermiyoruz.Farkını veriyoruz arkadaşlar.
-Çizim alanımızı formun 0,0 noktasına taşıdıktan sonra istediğimiz açı değerini vererek çizim alanımızı döndürüyoruz.
-Çizim yapacağımız alanı döndürdükten sonra eski koordinatına yani istediğimiz noktaya geri taşıyoruz.Bakın dikkat edin aynı şekilde taşıma işlemi yapılıyor.Direk koordinat noktaları verilip bir noktadan al diğerine bırak işlemi yok.İki nokta arasındaki farklar belirtiliyor.
-Evet tuvalimizi eski yerine taşıdıktan sonra artık çizimimizi rahatlıkla yapabiliriz.Özetlemek gerekirse tuvalini yarat.(0,0) noktasına taşı , açısını ayarlayıp döndür,tekrar eski yerine al ve çizimi yap şeklinde aşamalardan oluşmaktadır.

Evet gelelim mantığını anladıktan sonra kodlara ...


Graphics g = this.CreateGraphics(); // çizim alanı yaratılır.
            Pen kalem = new Pen(Color.DarkBlue, 2.0f); // çizim için kalem oluşturulur.

            g.TranslateTransform(-250, -200, System.Drawing.Drawing2D.MatrixOrder.Prepend);

// çizim alanımız (0,0) noktasına taşınır.Bakın buradan çizimin yapılacağı alan daha önceden
//250,200 noktasından itibaren yapılacağı düşünülmüştür ve ona göre taşıma işlemi yapılmıştır
//Dikkat edilmesi gerek bir nokta daha var ki o da MatrixOrder kısmıdır.Bu kısımda öncelik //sırası belirtilir.İlk yapılacak olana Prepend değeri verilir.Ondan sonraki çizim alanı //ayarlamalarında ise Appen durumu verilir.


            g.RotateTransform(45, System.Drawing.Drawing2D.MatrixOrder.Append);

//Çizim alanı taşındıktan sonra istenilen açıda döndürme işlemi yapılır.

            g.TranslateTransform(250, 200, System.Drawing.Drawing2D.MatrixOrder.Append);

//Çizim alanı döndürme işlemi yapıldıktan sonra tekrar asıl koordinatına geri taşınır.

            g.DrawRectangle(kalem, 100, 100, 300, 200);

// en son olarak da çizim alanı ile ilgili tüm işlemler yapıldıktan sonra çizim işlemi //gerçekleşir.Fakat bu işlemlerde sıra çok önemlidir.İyi düşünülüp yapılmalıdır.


Umarım yararlı olmuştur.Bir diğer makalede görüşmek dileğiyle ... 

C# GDI Kullanımı 2

Merhaba arkadaşlar . Gdi sınıfında kaldığımız yerden devam edelim. C# GDI Giriş 1 başlıklı makalemde gdi ın mantığını çizim mantığını dikkat edilmesi ve unutulmaması gerekilen önemli noktaları anlatıp Gdi sınıfını kullanmaya başlamıştım.Son olarak C# da daire çizmeyi anlatmıştım.Kaldığımız yerden devam edelim.

Örnek 4 : Yazı Çizmek :

Bir önceki makalemde form da dahil aslında tüm nesneler bir çizim ürünüdür diye anlatmıştım.Bu bilgiden yola çıkarak istediğim font ta istediğim boyutta ve istediğim yere yazı da çizdirebilirim.

Bu işlem için kullanılacak komut ; DrawString ...


g.DrawString("Koray DÜZGÜN", new Font("Arial", 28f), Brushes.BlueViolet, 150, 150);

DrawString komutunun istediği parametreler (çizimYapılacakYazı,Fontu,Brush/*yani fırça*/,X1.Y1)

Yazı çizim işleminde dikkat ettiyseniz Pen değil Brush istemiştir.Ve X1 ve Y1 noktaları da yazının sol üst noktasının bulunacağı konumdur.

Örnek 5 : Pasta Dilimi Çizmek :

Daha önce bir çok yerde görmüşsünüzdür mutlaka.Ağırlıklı kullanım alanı istatistik-i bilgiler vermektir.

Bu işlem için kullanılacak komut : DrawPie ...

g.FillPie(Brushes.Chocolate, 100, 100, 200, 200, 0, 45);

İstediği parametreler(Brush,Başlangıç X koordinatı,Başlangıç Y koordinatı,Genişliği,Yüksekliği,Başlangış açısı,Kaç derece çizileceği)



C# GDI Giriş 1

Merhaba arkadaşlar.Bu makalemde sizlere GDI sınıfından bahsedeceğim.Nedir bu Gdi ? Gdi'a girmeden önce şunu belirtmekte fayda görüyorum.Düşünün bir form oluşturdunuz projenizde ve bu forma çeşitli nesneler eklediniz.PictureBox indan tutun GridView ına kadar her ne eklerseniz ekleyin formunuza aslında eklediğiniz her bir nesne formunuz üzerine çiziliyordur.Yani kısaca sizin gördüğünüz aslında bir resimdir.Formunuz da bu gördüğünüz resmin tuvalidir arkadaşlar.Hatta oluşturduğunuz form bile çizilerek oluşturulmaktadır.Ekranınızın görüntü frekanslarına göre ortalama saniyede 50 60 kez çiziliyor formunuz ve formunuz içerisindeki nesneler.

Bu ön bilgi ışığında tekrardan GDI a geçelim.Ne demiştik form dahi her nesne ekranda çiziliyor.İşte bizim de kendi çizimlerimizi, kendi grafiklerimizi , kendi resimlerimizi vs. çizmemiz için oluşturulmuş bir sınıftır.GDI ekran kartı üzerinde (GPU) değil işlemci (CPU) üzerinde işlemlerini yapmaktadır.Dolayısıyla çok fazla kullanılan bir sınıf değildir.Fakat bilmekte kesinlikle fayda vardır.

Peki neler yapabilirim ben GDI sınıfını kullanarak? Basit bir çizgiden tutun da grafiksel pasta dilimlerine , yazı çiziminden tutun da resim işlemeye kadar bir çok işlemleri kolaylıkla yapabilirsiniz.Adım adım örneklerle yapabileceklerinizi elimden geldiğince anlatmaya çalışacağım ...

Fakat arkadaşlar örneklere geçmeden önce çizim yapmak için bilmeniz gereken önemli konular var.Bunlardan bir tanesi formunuza (formunuz da dahil) herhangi bir nesne sürükleyip bıraktığınızda bu nesnenin bir location(konum) bilgisi vardır.X ve Y. Burdaki X nesnenin içinde bulunduğu formun X inden olan uzaklığıdır.Buna keza aynı şekilde Y bilgisi ise formun Y noktasından olan uzaklığıdır.Formunuzun X ve Y noktaları ise formunuzun ekranda bulunduğu X ve Y noktalarıdır.Ve unutulmaması gereken en önemli bilgi ise bu X ve Y noktaları gerek nesnelerin gerekse formun size göre sol üst uç noktası (0,0) olarak kabul edilip değer alır.


Önemli Not: Arkadaşlar burada yapacağımız işlem çizim olacağı için öncelikle çizim alanımızı yani kullanacağımız tuval i belirtmemiz gerekmektedir.Bunun sebebi de düşünün elinize çizim yapmanız için gerekli olan araçları aldınız.Çizime hazırsınız.İyi güzel de nereye çizim yapacaksınız.İşte aynı bu mantıktan yola çıkarak öncelikle çizim yapacağımız tuval imizi belirtiyoruz.


Graphics g = this.CreateGraphics();

 Şeklinde graphics sınıfını kullanarak çizim yapacağım tuvalimi oluşturmuş oldum ve ismie de g dedim.


Not : this kelimesi formumu işaret etmektedir.Ben tuval olarak formumu kullanıyorum arkadaşlar anlatacağım tüm örneklerimde.



Örnek 1 : Çizgi Çizmek


DrawLine komutu kullanılarak çizim yapılır.


Pen kalem = new Pen(Color.Blue, 2.0f);
g.DrawLine(kalem, 10, 10, 200, 10);

DrawLine komutunun benim kullandığım şeklinde benden istediği parametreler : (Pen,float x1,float y1,float x2, float y2) 

Şimdi burda istenilen X1 ve Y1 parametreleri çizgimin başlangıç koordinatı , X2 ve Y2 parametreleri de çizgimin bitiş koordinatlarıdır.

Örnek 2 : DikDörtgen Çizmek

DrawRectangle komutu kullanılır. İstediği parametreler (Pen,float x1,float y1,float x2, float y2) . Burada X1 ve Y1 parametreleri dikdörtgenin sol üst noktasının koordinatlarıdır.X2 ve Y2 parametreleri de sağ alt noktasının koordinatlarıdır.

g.DrawRectangle(new Pen(Color.Red, 2.0f), 30, 30, 300, 150);

Örnek 3 : Elips veya Daire Çizmek

DrawEllipse komutu kullanılır. İstediği parametreler (Pen,float x1,float y1,float x2, float y2) Burada mantık biraz farklıdır. Aslında yapılan sizden bir dikdörtgen alan belirlemenizdir.Daha sonrasında C# bu alanın içerisine daireyi veya elips i çizer.Kenarlara teğet olarak yerleştirir. Bu açıdan baktığımızda X1 ve Y1 dikdörtgenin sol üst noktasının koordinatları , X2 ve Y2 ise dikdörtgenin sağ alt noktasının koordinatlarıdır.

g.DrawEllipse(new Pen(Brushes.Aqua), 50, 50, 300, 200);