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
Volkan Atasever
Volkan Atasever
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
8 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: ardindan butonumuzun dijital false) fotograf height isimli isleme newcolor piksel pixelcolor.g resmimizi sinifindan temelleri width=320 C# / VC#/.NET Volkan Atasever
 
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 : C# / VC#/.NET
Yayınlanma Tarihi : 20.7.2006
Okunma Sayısı : 54983
Yorum Sayısı : 4     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 23.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 23.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 23.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 23.11.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
C# ile Resim İşlemeye Kısa Bir Bakış
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Resim ve görüntü hayatımızın her alanında her an gerçek günlük yaşantımızda veya sanal ortamlarda rastladığımız ve çağımızda dijital fotoğraf makinesi vb. cihazlarla yanımızda taşıdığımız bir olgu haline geldi. Ülkemizde satışlarında gerçekten bir patlama yapan dijital fotoğraf makinelerine ilişkin resim işleme kavrama temelleri ve aynı zamanda inanılmaz bir hızla gelişen görüntü tanıma yazılımların kullanım temelleri üzerinde ciddi bir biçimde durmak istiyorum. Ülkemizde üniversitelerin gerçekten üstünde durduğu bir kavramdan bahsediyoruz resim işleme( Çoğunlukla görüntü işleme diye anılır). Oyun stüdyolarının ve Holywood’un bir kare için bile harcadığı zaman ve makine gücünü temel alırsak günümüzde bu kadar öneme sahip olan temel resim işlemlerini irdelememiz kaçınılmaz oluyor. İlk önce piksel ne demek bunu açıklama gereksinimi duyuyorum:

Bir görüntünün en küçük yapıtaşıdır. 1*1 mm olacağı gibi, 5*5cm veya 10*10cm de olabilir genel bir standardı yoktur. Piksel herhangi bir ölçüte sahip olmadığı gibi birden çok pikselden meydana gelen topluluğa ise resim adını veriyoruz ( Biraz Lise ders kitaplarından fırlamİ bir cümleye benzese de bu tanımı belleğimize kazımak zorundayız). Yapacağımız işlemlerde GDI+ kullanılmıştır. Bu makalemizde ise dijital resim işleminin temeli olan RGB meselesine değineceğim. Bildiğiniz gibi:

R: Red (Kırmızı)
G: Green (Yeşil)
B: Blue (Mavi)
 
Dijital Resimler bu 3 renkten oluşur.

Ardından Form1 sınıfımızın kodlarına şunları ekleyelim:

Bitmap resim;

Forma çift tıklayıp şu kodu yazalım:

isle.Enabled = false;
Eminim daha öncede aşina olduğunuz enabled özelliğini kapattık. İlk yapacağımız iş tahmin ettiğiniz gibi resim aç butonuna tıklamak olacaktır ve ardından bu butonun kodunu yazalım tabi ki de resim işleme ile tam olarak ilgisi olmasa da yinede can alıcı bir kod çünkü resmimizi Picture box’ımıza bu buton sayesinde yerleştiriyoruz. Resim Aç butonumuzun kodu:

isle.Enabled = true;
resimac.Enabled = false;
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = "c:\\";
openFileDialog.Filter = "Bitmap Dosyaları (*.bmp)|*.bmp|Jpeg Dosyaları (*.jpg)|*.jpg";
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;
if (DialogResult.OK == openFileDialog.ShowDialog())
{
    resim = (Bitmap)Bitmap .FromFile(openFileDialog.FileName, false);
}
Burada standart bir kodlamayla resmimizi Bitmap sınıfından resim isimli nesnemizi seçtiğimiz dosyanın path’i(yani yolu) ile canlandırıyoruz. Bu kodun üstünde fazla durmayacağım.
isle isimli butonumuzun koduna gelecek olursak:

resimac.Enabled = true;
isle.Enabled = false;
try
{
    int x, y;
    for (x = 0; x < resim.Width; x++)
    {
        for (y = 0; y < resim.Height; y++)
        {
            Color pixelColor = resim.GetPixel(x, y);
            Color newColor=Color.FromArgb(pixelColor.R,pixelColor.G,pixelColor.B);
            if(checkBox1.Checked==true && checkBox2.Checked==true && checkBox3.Checked==true)
                newColor = Color.FromArgb(pixelColor.R, pixelColor.G, pixelColor.B);
            else if (checkBox1.Checked == true && checkBox2.Checked == true && checkBox3.Checked == false)
                newColor = Color.FromArgb(pixelColor.R, pixelColor.G, 0);
            else if (checkBox2.Checked == true && checkBox3.Checked == true && checkBox1.Checked == false)
                newColor = Color.FromArgb(0, pixelColor.G, pixelColor.B);
            else if (checkBox3.Checked == true && checkBox1.Checked == true && checkBox2.Checked == false)
                newColor = Color.FromArgb(pixelColor.R, 0, pixelColor.B);
            else if (checkBox1.Checked == true)
                newColor = Color.FromArgb(pixelColor.R, 0, 0);
            else if (checkBox2.Checked == true)
                newColor = Color.FromArgb(0, pixelColor.G, 0);
            else if (checkBox3.Checked == true)
                newColor = Color.FromArgb(0, 0, pixelColor.B);
            resim.SetPixel(x, y, newColor);
        }
    }
    // Görüntümüz pictureboxda gösteriliyor
    PictureBox1.Image = resim;

    // Piksel Formatları label1 de gösteriliyor
    label1.Text = resim.PixelFormat.ToString();
    }
    catch
    {
        MessageBox.Show("Hata");
    }
İlk öncelikle try-catch bloğumuz dikkatinizi çekmiş olmalı kod bloğumuzda bir sorun çıkarsa Hata mesajı bırakacak. x ve y adlı iki alanımız for döngümüzde piksellerimizi taramak için kullanacağız. Ardından resmin en ve boy yüksekliğini ele alıp her piksele ulaşıyoruz ve for döngümüzü buna göre çalıştırıyoruz. GetPixel() metodumuzla o anki piksel değerlerini Color sınıfından pixelColor adlı nesnemize atıyoruz. Ardından yine Color sınıfından newColor isimli bir nesne atayıp Color sınıfı üstünden statik olan FromArgb metodumuzu çalıştırıp aldığı 3 parametreye göre çeşitli atraksiyonlar yapıyoruz. Checkboxlarımızın durumuna göre basit bir if-else mantığı içinde (RGB değerlerinin En iyi anlatımının if-else mantığı içinde gözler önüne serilebileceği kanısındayım) newColorımızı canlandırıyoruz. İlk canlanmada piksel değerleri değişmediği için hiçbir checkbox’a basılmamışsa resim orijinal değerlerini koruyacaktır aynı etkiyi RGB checkboxlarının üçünü birden seçtiğinizde de görebilirsiniz. Ardından değiştirdiğimiz pikseli SetPixel()metodu ile resmimizi piksel piksel değiştiriyor ve ardından piksellerimizi picturebox’ımıza yerleştiriyoruz. resim.PixelFormat.ToString() kodunda ise label’ımıza pikselimizin formatını atayabiliyoruz.



orjinal resim



red Seçilmiş



green seçilmiş



blue seçilmiş



red ve green seçilmiş



green ve blue seçilmiş



red ve blue seçilmiş

Son Olarak piksellere ulaşmamızın mantığını görmek için isle butonumuzun kodundaki x ve y alanlarımızı sırayla ilk önce for döngüsünün artım miktarında x+=3 ve y+=3 yapıp sırasıyla deneyelim ve böylece resmimize değişik efektler vermiş olabiliriz.

 for (x = 0; x < resim.Width; x+=2)
{
          for (y = 0; y < resim.Height; y+=2)
         {
Bu değişimin getirdiği efekti size bırakıyorum. Son olarak bir buton ekleyelim ve resmimizi kaydetmek için bu butonumuzu kodlayalım. Kodumuz:

resim.Save("C:\\cikti.jpg");
MessageBox.Show("Resim Kaydedildi!");
Bu kodumuzda görüntümüzü C:\ yoluna cikti.jpg ismiyle kaydediyoruz. Resim işlemenin daha doğrusu görüntü işlemenin temelini yani piksel ve RGB üstünde durduk umarım sizin için faydalı olmuştur. Sorularınızı ve yorumlarını bana email yoluyla iletebilirsiniz.

Volkan Atasever
[email protected]
Makale:
C# ile Resim İşlemeye Kısa Bir Bakış C#, Visual C# ve .NET Volkan Atasever
  • Yazılan Yorumlar
  • Yorum Yaz
ARA
19
2013
Tasarımdaki form üzerinde, 5 Text box, bu text boxlara ait label’lar ve 6 adet buton bulumaktadır.
ARA
19
2013
Tasarımdaki form üzerinde, 5 Text box, bu text boxlara ait label’lar ve 6 adet buton bulumaktadır.
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