27 Kasım 2009 Cuma

GDI+ - Basit çizim (HatchBrush)


Tekrar merhaba. Uzun süredir zaman bulup birşeyler yazamıyordum. Bulmuşken fazla çene yapmayıp icraata geçeyim hemen.
Bugün kronolojik ilerleme yönteminden vaz geçip, karışık entry girme yöntemine geçişimizi kutluyoruz. Evet artık bir oradan bir buradan konu seçip makaleler gireceğim. Belli bir düzende ilerlemekten sıkıldım.

Gelin şimdi GDI+ ile (Graphic Design Interface) bir ASP sayfasında uygulama geliştirelim.


Hatta size şuan benimde kullandığım arka planı nasıl GDI+ ile çizebileceğimize bakalım.

Hemen Web sekmesinde yeni bir ASP.NET Web Application açıyorum. Şimdi resmi nerede gösterelim? ASP.Net i kullanalım ve Asp:Image kontrol'ünü seçelim. ToolBox'tan bir asp:image kontrolü ekliyorum. ID'sinede "resim" diyorum. Peki resmi nerede çizelim? Web taraflı bir GDI+ örneği olacağı için (yani resim ram'de saklanacak, yer kaplamayacak) resmi çizmek için boş bir web sayfasını kullanabiliriz. Bunun için Projeye picture isimli yeni bir web form'u ekliyorum. Ve burada sadece resmi göstereceğim için "Page" kısmı hariç geri kalan tüm etiketleri siliyorum.




F7 ile kod tarafına geçiyorum

Şimdi GDI+ ile çizim yapabilmemiz için Drawing koleksiyonunu eklememiz gerekir. Onun içinde yukarıya using System.Drawing i ekliyorum. Çizimi birşeyin üstünde yapmam gerekir öyle değilmi? Boşluğa birşey çizebilirmisiniz? İlla önünüzde bir kagıt bir madde olması gerekir. Bizim burada kullandığımız ise Bitmap nesnesi. Bitmap nesnemi tanımlıyorum;

Bitmap bmp = new Bitmap(300,200);

Benden genişlik ve uzunluk olarak parametre istiyor. Çizeceksinde nereye diyor kendileri.

Ok şimdi Graphics nesnemi oluşturmam gerekli çizimi yapacak olan o çünkü.

Graphics g = Graphics.FromImage(bmp); 

Dikkat ederseniz Griphics nesnemizi new'lemedik. Çünkü Graphics nesnesi bizden üzerinde çalışacağı alanı vermemizi ister. Bizde ona FromImage metodu ile Bitmap'imizi (bmp) verdik.

Tamamdır. Şimdi çizimi yapacağız ama ne çizeceğiz? Ne demiştik blog'un background resmini değil mi?
Evet ok ozaman diyelim ki ben bir Dikdörtgen çizeceğim efem. Ve Dikdörtgenim'in tepeden uzaktığı "0", soldan uzaklığı "0" genişliği "300" yüksekliği ise "200" olsun. Aynen şu şekilde diyoruz;

Rectangle r1 = new Rectangle(0, 0, 300, 200);

Bunuda hallettik. Şimdi çizicem ama neyle çizeyim ? Kurşun kalem mi? Yağlı boyamı ? Benim bu uygulamada kullanacağım brush tipi HatchBrush. Ve HatchBrush'ı kullanabilmek için "using System.Drawing.Drawing2D" koleksiyonunu eklememiz gerekir.
HatchBrush'ın kendi içinde çok güzel stilleri var. Bunlardan HorizontalBrick yani YatayTuğla düzenini kullanacağız.

HatchBrush'ımızı oluşturalım;

HatchBrush brush = new HatchBrush(HatchStyle.HorizontalBrick, Color.Gray, Color.Red);

Bizden üç parametre aldı. İlki ne çizmemiz gerektiği, ikinci ve üçüncü ise renklerinin ne olması gerektiği.

Şimdi artık Dikdörtgen'imizi boyama vakti geldi. Bu işlemi Graphics nesnemizle yapacağız demiştik öyle değilmi?

g. diyip FillRectangle metodunu çağırıyoruz. Bu metot bizden iki parametre istiyor. İlki hangi kalemle çizeceğimiz yani brush, ikincisi ise nereye çizeceğimiz yani Rectangle'ımız.

g.FillRectangle(brush, r1);
Gerekli parametreleri girdim.

Şimdi resmi oluşturduk ama resim şuan Ram'de duruyor. Yani hiçbir boyut kazanmadı. Bir yerde görebilmemiz için Bitmap'in save metodunu kullanmamız gerekir.

bmp.Save diyip Save metodunu çağırıyoruz. Save metodunun beş adet Overload'u var. Biz bu resmi bir web sayfasında göstereceğimiz için saklayacağımız kaynağı Response.OutputStream olarak seçiyoruz. İkinci parametre olarakta formatını belirlememizi istiyor. ImageFormat yazıp "ctrl + ." yapıp (elle yukarıya yazmakla aynı işlemi yapar) yukarıya using System.Drawing.Imaging'i ekliyoruz.


bmp.Save(Response.OutputStream, ImageFormat.Jpeg);

Evet kaydettik. Geriye ramde oluşturduğumuz alanı silmek kaldı. Çizmek için kullandığımız Graphics (g) ve
HatchBrush (brush) kaldırıyoruz, Dispose ediyoruz.


g.Dispose();
brush.Dispose();


Tamamdır. Default sayfamıza View in Browser diyip gözlemleyelim bakalım neler yapmışız?

Evet hiç birşey yok. Neden? hmm ok buldum; Çünkü default sayfamızdaki asp:Image kontol'üne bir kaynak vermedik değilmi? Default sayfama gelip F7 ile kod tarafına geçip sayfanın Load'una gerekli kodları yazıyoruz.

resim.ImageUrl = "picture.aspx";

Tekrar çalıştırıp gözlemliyoruz.



Ok görev tamamdır. Eğer bu resmi arkaplan olarak kullanmak isterseniz Body etiketinin "background-image" özelliğine resmi atamanız yeterlidir.

Tekrar görüşmez üzere şimdilik bu kadar.






KODLAR:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;//Bitmap
using System.Drawing.Drawing2D;//Brush
using System.Drawing.Imaging;//ImageFormat

namespace blogGDIplus
{
    public partial class picture : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(300, 200);
            Graphics g = Graphics.FromImage(bmp);

            Rectangle r1 = new Rectangle(0, 0, 300, 200);
            HatchBrush brush = new HatchBrush(HatchStyle.HorizontalBrick, Color.Gray, Color.White);
            g.FillRectangle(brush, r1);

            bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
            g.Dispose();
            brush.Dispose();
        }
    }
}

Hiç yorum yok:

Yorum Gönder