msHOWTO

C# da GDI ile Resmi Siyah Beyaz Yapma etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C# da GDI ile Resmi Siyah Beyaz Yapma etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

12 Nisan 2012 Perşembe

C# GDI ile Resim İşleme

Merhaba arkadaşlar. Bu makalemde yapacağım örneği aslına bir çok kez görmüşsünüzdür. Mesela internette dolaşıyorsunuz.Ve süper bir resim gördünüz.O resmi indirmek istediniz.İndirdiniz açıyorsunuz veee bir bakıyorsunuz ki resmin bir yerinde reklam yazısı filan görüyorsunuz.Ne kadar sinir bozucu bir durum değil mi ? Bence de fakat işte şimdi tam bu işlemi yapan uygulama yapacağız. :) Biraz da biz başkalarını sinir edelim değil mi ? Daha iyimser bir örnek verecek olursak diyelim ki e-ticaret sitesi yaptınız ve sadece size ait ürünler var.Bu ürünleri koymak istiyorsunuz.Fakat çalınacak diye korkuyorsunuz.Kendi logonuzu yada web sitenizin adresini resme işlemek istiyorsunuz.Bir resim için kolay bir durum ama diyelim ki yüzlerce resminiz var.Eee her resim için aynı işlemleri mi yapacaksınız.Tabi ki hayır.Birlikte yapacağımız uygulama ile bu işlemi Gdi kullanarak tek bir tuşla halledeceksiniz. Gelelim uygulamayı yapmaya ...

Formun tasarımı için bir tane picturebox,bir adet openfiledialog ve 2 adet button ekleyin.Butonların birinin text ine Gözat diğerine ise İmzala girin.Gelelim kodlama işlemine...

Aşağıdaki kütüphaneleri kod sayfanızın en üstüne yazın (kod sayfasına geçmenin bir diğer yolu de tasarım anında iken F7 tuşuna basmaktır.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;


Daha sonra aşağıdaki değişkenleri global olarak tanımlayın..


string dosyaYolu = string.Empty;
        Bitmap bmp = null;


Gözat butonuna aşağıdaki kodları yazın ...


if (openFileDialogDosyaAc.ShowDialog() == DialogResult.OK)
            {
                dosyaYolu = openFileDialogDosyaAc.FileName;

                //bir bitmap nesnesi oluşturulur ve seçilen resim bu nesneye yüklenir.  

                bmp = new Bitmap(dosyaYolu);

                pictureBox1.Image = bmp;
  
              //picturebox nesnesinin sizemode özelliği strech olarak ayarlanır.Bunun //sebebi ise seçilen resmin picturebox nesnesinde tam olarak gözükmesini sağlamaktır.

                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            }

Ve geldik en önemli kısma ... İmzala buttonuna aşağıdaki kodları yazın ...


bmp = pictureBox1.Image.Clone() as Bitmap; // picturebox da hangi resim yukluyse onu clone lar.

            Graphics g = Graphics.FromImage(bmp);
            string imza = "Koray Düzgün";
            Font f = new Font("Arial", 40,FontStyle.Bold|FontStyle.Italic);// araya seperatör koyarak birden fazla style verebiliriz.
            int x = (pictureBox1.Width / 2) - (Convert.ToInt32(f.Size*imza.Length) /2);
            int y = (pictureBox1.Height / 2) - (f.Height / 2);
           
            g.DrawString(imza, f, Brushes.Gold, new Point(x, y));// bu kısımda imza string değeri resmin tam ortasına çizilir.x ve y noktalarının değerleri değiştirilerek istenilen noktaya işlemi yapabilirsiniz.
           
            pictureBox1.Image = bmp;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
  


Bir sonraki makalemde görüşmek dileğiyle ...

C# da GDI ile Resmi Siyah Beyaz Yapma

Merhaba arkadaşlar.Daha önceki makalelerimde Gdi konusuna yeterince değindim.Bu makalemde ise hem gdi sınıfını hem de bitmap sınıfını kullanarak güzel bir uygulama yapacağız.Photoshop kullandınız mı daha önce bilmiyorum fakat kısaca şu şekilde anlatayım.Herhangi bir resmi siyah beyaz nasıl yapılır onu anlatacağım.

Öncelikle nasıl yapılır biraz ondan bahsedeyim.Arkadaşlar her bir resim çok küçük renk parçaların bir araya gelmesiyle oluşmaktadır.Bu renk parçalarına pixel denilmektedir.Peki bir resmi nasıl siyah beyaz hale getireceğiz? Tabi ki pixellerden yola çıkacağız.Bütün resmi pixel pixel tarayıp elde ettiğimiz pixelin renklerini değiştireceğiz. Her bir pixel RGB renk kodlarıyla simgelenmektedir.Bir pixel i siyah beyaz yapmak için ise pixel in RGB renk kodlarının ortalamasını alıp tekrar kendine atayacağız.Böylelikle bir resmi siyah beyaz yapmış olacağız.Bu bilgilerden yola çıkarak gelelim formumuzu tasarlamaya ve kodlama işlemine...

Öncelikle formunuza bir adet picturebox , 2 adet button ve bir adet openfiledialog atın.Butonların birinin text ine Gözat diğerine ise Siyah Beyaz girin.Gelelim kodlama işlemine...

Aşağıdaki kütüphaneleri kod sayfanızın en üstüne yazın (kod sayfasına geçmenin bir diğer yolu de tasarım anında iken F7 tuşuna basmaktır.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;


Daha sonra aşağıdaki değişkenleri global olarak tanımlayın..


string dosyaYolu = string.Empty;
        Bitmap bmp = null;


Gözat butonuna aşağıdaki kodları yazın ...


if (openFileDialogDosyaAc.ShowDialog() == DialogResult.OK)
            {
                dosyaYolu = openFileDialogDosyaAc.FileName;

                //bir bitmap nesnesi oluşturulur ve seçilen resim bu nesneye yüklenir.  

                bmp = new Bitmap(dosyaYolu);

                pictureBox1.Image = bmp;
  
              //picturebox nesnesinin sizemode özelliği strech olarak ayarlanır.Bunun //sebebi ise seçilen resmin picturebox nesnesinde tam olarak gözükmesini sağlamaktır.

                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            }

Ve geldik en önemli kısma... Siyah Beyaz butonuna aşağıdaki kodları yazın ...

for (int y = 0; y < bmp.Height; y++) //Pixelleri boyuna olarak tarar.
            {
                for (int x = 0; x < bmp.Width; x++)//Pixelleri yatay olarak tarar.
                {
                    Color eski = bmp.GetPixel(x, y); //Sıradaki pixeli alır.
                    int ortalama = (eski.R + eski.G + eski.B) / 3; //ele alınan pixelin RGB kodlarının ortalamasını alır.
                    Color yeni = Color.FromArgb(eski.A, ortalama, ortalama, ortalama);//Bulunan ortalamanın RGB olarak renk değerini alır.
                    bmp.SetPixel(x, y, yeni);//Pixele yeni RGB kodlarını atar ve pixeli eski yerine koyar.
                }
            }

            pictureBox1.Image = bmp;


Tüm bu işlemleri yaptıktan sonra rahatlıkla çalıştırabilirsiniz.Biraz bekleme yapacaktır.Bunun nedeni ise Gdi kullanılmasıdır.Daha önceki makalelerimde de söylediğim gibi Gdi işlemci destekli çalışır.Bu mantıkla bir resmi istediğiniz renklerde ayarlayabilirsiniz.Çok çeşitli güzel şeyler ortaya çıkarabilirsiniz.Kolay gelsin arkadaşlar...