Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Murat Gedik
Murat Gedik
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
1 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: anket.xml asp.net dinamik fntbuyukfont for(int grafik kullanici nesnesi olacak. olmustur. private strfile string uygulama yapmak ASP.NET Murat Gedik
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : ASP.NET
Yayınlanma Tarihi : 1.12.2004
Okunma Sayısı : 43237
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 25.4.2024
Turhal Temizer
Mac OS/X Removing CUDA 25.4.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 25.4.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 25.4.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
ASP.NET' de Dinamik Olarak Resim Oluşturmak
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Web uygulamalarında dinamik olarak resim oluşturma ihtiyacı çok sık doğmaktadır. Klasik ASP uygulamalarında bunu yapmak ya 3. parti şirketlerin bileşenlerini kullanarak ya da çok zahmetli kodlar yazarak mümkün olmaktaydı. ASP.NET ile bunu zahmetsizce yapmak mümkün olmuştur. .NET Framework, ASP.NET uygulamalarında dinamik olarak resim oluşturmak için gelişmiş birçok sınıf ve metot içerir.

Bu konuyu daha iyi kavrayabilmek için beraberce, bir gerçek dünya uygulamasında kullanılabilecek, küçük bir uygulama geliştireceğiz. Birçok web sitesinde çeşitli anketler görmüşsünüzdür. Bizim örneğimizde bir anket uygulaması olacak.

Anket sonuçlarını basit bir XML dosyasında tutacağız. XML dosyamızın içeriği şu şekilde:
Anket.xml

<?xml version="1.0" encoding="utf-8"?>
<Hits>
<Hit>70</Hit>
<Hit>25</Hit>
<Hit>15</Hit>
<Hit>25</Hit>
<Hit>10</Hit>
</Hits>

Uygulamamız iki adet sayfadan oluşuyor.
- anket.aspx
- anketsonuc.aspx
anket.aspx sayfasında kullanıcı ankete oy veriyor. Verdiği oy Anket.xml dosyasına kaydediliyor.

private void OyVer(int Cevap)
{
string strFile = Server.MapPath("Anket.xml");
string strNode = "/Hits/Hit[" + Cevap.ToString() + "]";

XmlDocument xmlAnket = new XmlDocument();
xmlAnket.Load(strFile);

int nOySayisi = Convert.ToInt32(xmlAnket.SelectSingleNode(strNode).InnerText) + 1;
xmlAnket.SelectSingleNode(strNode).InnerText = nOySayisi.ToString();

xmlAnket.Save(Server.MapPath("Anket.xml"));
}



Kullanıcı bu sayfadaki "Anket Sonuçlarını Gör" butonuna tıkladığında ise anketsonuc.aspx sayfamız açılıyor. Bu sayfa yüklenirken Anket.xml dosyasından anket sonuçlarını okuyor ve grafik çiziminde bize yardımcı olması için bu değerlerin yüzdeliklerini hesaplıyor.

private void Page_Load(object sender, System.EventArgs e)
{
// Anket sonuçları öğreniliyor...
string strFile = Server.MapPath("Anket.xml");

XmlDocument xmlAnket = new XmlDocument();
xmlAnket.Load(strFile);

int nToplamOy = 0;

for(int i=0; i<5; ++i)
{
Sonuc[i] = Convert.ToInt32(xmlAnket.SelectSingleNode("/Hits/Hit["+ Convert.ToString(i+1) +"]").InnerText);
nToplamOy += Sonuc[i];
}

// Sonuçların yüzdelik değerlerini hesaplayıp SonucYuzde[] dizisine aktarıyoruz...
// Bu değerleri grafik çiziminde kullanacağız.
for(int i=0; i<5; ++i)
SonucYuzde[i] = Sonuc[i] * 100 / nToplamOy;

// Sonuçlara göre grafik oluşturuluyor...
GrafikOlustur();
}
Bu sayfamızda bazı global değişken ve dizi tanımları yer alıyor.

// Anket sonuçlarını depolamak için 5 elemanlı bir dizi oluşturuluyor...
private int[] Sonuc = new int[5];

// Anket sonuçlarının yüzdelik oranlarını depolamak için 5 elemanlı bir dizi oluşturuyoruz...
private int[] SonucYuzde = new int[5];

// Anket cevaplarının kısaltmalarını bir diziye ekliyoruz...
private string[] Cevaplar = new string[5] {"FB","BJK","GS","TS","DİĞ"};

// Çizilecek dikey çubukların genişliği...
private int Bar_W = 30;
Şimdi gelelim bizi asıl ilgilendiren kısma. Page_Load metodunun en sonuda çağrılan GrafikOlustur() metodu, anket sonuçlarını grafik olarak göstermek için gerekli işlemleri yapıyor. Kod içerisinde açıklamalar mevcut olduğundan, ayrıca bir açıklama yapmayacağım.

private void GrafikOlustur()
{
// imgGrafik nesnemizin boyutları alınıyor...
int imgAnket_W = Convert.ToInt32(imgAnket.Width.Value);
int imgAnket_H = Convert.ToInt32(imgAnket.Height.Value);

// Bitmap nesnesi oluşturuluyor...
Bitmap bmpAnket = new Bitmap(imgAnket_W, imgAnket_H);

// Graphics nesnesi oluşturuluyor...
Graphics grpAnket = Graphics.FromImage(bmpAnket);

// 2 farklı boyutta Font nesnesi oluşturuluyor...
Font fntKucukFont = new Font("Tahoma", 8);
Font fntBuyukFont = new Font("Tahoma", 12);

// Tuvalimizin arka planı sarı renkle boyanıyor...
grpAnket.FillRectangle(new SolidBrush(Color.Yellow), 0, 0, imgAnket_W, imgAnket_H);

// Tuvalimize (grpGrafik) 2 tane metin yazdırıyoruz...
grpAnket.DrawString("www.verivizyon.com", fntBuyukFont, new SolidBrush(Color.Red), 5, 10);
grpAnket.DrawString("Hangi futbol takımını tutuyorsunuz?", fntBuyukFont, new SolidBrush(Color.Navy), 5, 30);

// Anket sonuçlarına göre dikey dikdörtgenler çizdiriyoruz...
for(int i=0,sol=50; i<5; ++i,sol+=50)
{
grpAnket.FillRectangle(new SolidBrush(Color.RoyalBlue),sol,(imgAnket_H-SonucYuzde[i]),Bar_W,SonucYuzde[i]);

grpAnket.DrawString(Sonuc[i].ToString() + " oy", fntKucukFont, new SolidBrush(Color.Red), sol, (imgAnket_H-SonucYuzde[i]-15));

grpAnket.DrawString(Cevaplar[i], fntBuyukFont, new SolidBrush(Color.Blue), sol, (imgAnket_H-SonucYuzde[i]-35));
}

// Oluşturduğumuz grafiği Image nesnesinde gösteriyoruz...
bmpAnket.Save(Server.MapPath("grafik.jpg"), ImageFormat.Jpeg);
imgAnket.ImageUrl = Server.MapPath("grafik.jpg");

// Grafiği bir dosyaya kaydetmeden ve bir Image nesnesi kullanmadan göstermek istersek aşağıdaki kodu kullanabiliriz...
// Response.ContentType = "image/jpeg";
// bmpAnket.Save( Response.OutputStream, ImageFormat.Jpeg);

// Oluşturduğumuz nesnelerimizi Garbage Collection’ın çalışmasını beklemeden temizliyoruz...
grpAnket.Dispose();
bmpAnket.Dispose();
}
Bu metot çalışmasını tamamlandığında aşağıdaki şekilde bir grafik oluşturmuş olacak.


Koddaki bazı kısımlar ilk bakışta biraz karmaşık gelebilir. Ama kodu biraz inceleyecek olursanız aslında hiç de karmaşık olmadığını göreceksiniz. Örnek uygulamayı indirmek için : tıklayın.

Umarım bu küçük uygulama ASP.NET’ de dinamik olarak nasıl resim oluşturulacağı konusunda size yardımcı olmuştur.

Herkese iyi çalışmalar dilerim…

Murat GEDİK
[email protected]


Makale:
ASP.NET' de Dinamik Olarak Resim Oluşturmak ASP.NET Murat Gedik
  • Yazılan Yorumlar
  • Yorum Yaz
AĞU
7
2005
Oluşturduğumuz grafiği Image nesnesinde gösteriyoruz... bmpAnket.Save(Server.MapPath(grafik.jpg), ImageFormat.Jpeg) imgAnket.ImageUrl = Server.MapPath(grafik.jpg) Burada JPG yerine GIF kullanmak daha avantajlı olacaktır. Görüntü daha düzgün olacaktır. bmpAnket.Save(Server.MapPath(grafik.gif), ImageFormat.Gif) imgAnket.ImageUrl = Server.MapPath(grafik.gif)
ARA
16
2004
Bilgileriniz çok fadalı oldu yeni makalelerinizi bekliyorum:)
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor