msHOWTO

12 Nisan 2012 Perşembe

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...




4 yorum:

  1. işte bu çok hoşuma gitti hocam

    YanıtlaSil
  2. Wonderful blog & good post on 3d scanning.Its really helpful for me, awaiting for more new post. Keep Blogging!

    YanıtlaSil
  3. Thanks for nice share nice blog with us. it is very interesting and attractive content with meaning full words on metal detector. Looking forward to it.

    YanıtlaSil