C# Örnekleri – Resimdeki Baskın Rengi Bulma

Twitter kullananlar, resim henüz yüklenme aşamasındayken resim arka planının sabit bir renk olmadığını, resimdeki baskın renge göre değiştiğini fark etmişlerdir.

Dijital görüntü piksellerden oluşur. Her bir piksel RGB denilen bir kodlama ile renklendirilir.

RGB Nedir?

RGB; red, green ve blue kelimelerinin baş harflerinden oluşan bir kısaltmadır. Şu anda, ekranda gördüğünüz her şey piksellerden oluşur ve her bir piksel kırmızı, yeşil ve mavi renkli ışıkların belli oranda kullanılarak elde edilmesiyle oluşmaktadır.

Resimdeki baskın rengi bulan programın ekran görüntüsü, örnekleriyle birlikte aşağıdaki şekildedir:

OpenFileDialog ile Dosya Seçimi

Dosya seçimi için açılan pencere, C# form uygulamasında OpenFileDialog ile sağlanır. Bunun için form içine eklenen openFileDialog1 nesnesi kullanılmıştır. Dosya seçim penceresini göstermek için aşağıdaki komut yazılır:

Seçilen dosya veya dosyalar, openFileDialog1 nesnesinin FileName özelliği ile elde edili: openFileDialog1.FileName

Eğer birden dosya seçilir ve bunların hepsinin elde edilmesi gerekiyorsa, string tipinde bir dizi döndüren şu özellik kullanılır: openFilaDialog1.FileNames

PictureBox nesnesine tıklandığında dosya seçimi yapılmasını sağlayan kod bloğu şu şekildedir:

Resimdeki Pikselin Renk Bilgisi Okuma

Resimdeki bir pikselin renk bilgisinin okunması için öncelikle bir Bitmap nesnesi üzerine resmin aktarılması gerekir. pictureBox1 nesnesi üzerinde gösterilen resmin oluşturulan Bitmap nesnesine aktarılması için aşağıdaki komut yazılır:

Resim üzerindeki satır (x) ve sütun (y) konumundaki renk bilgi de aşağıdaki şekilde elde edilir:

Yukarıdaki komut ile pikselin renk bilgisi integer tipte bir sayı olarak saklanır. ToArgb() metodu, pikselin kırmızı, yeşil ve mavi bilgilerinin dışında saydamlık bilgisinin elde edilmesinde de kullanılır. Bu bilgiler, integer tipte bir sonuç ile karşımıza getirir.

Renk Bilgileri ile Piksel Sayılarının Kaydedilmesi

Renk bilgisi, Dictionary tipinde bir nesne ile saklanır. Bu nesne, anahtar-değer (key-value) ikilisi şeklinde bilgi taşır. Dikkat edilmesi gereken noktanın anahtar değerlerini yalnızca bir kez içermesidir. Dolayısıyla bir renk bilgisi ile ilk karşılaşıldığında renk isimli Dictionary nesnesine kayıt eklenirken aynı renk ile karşılaşıldığında değer bir artırılır.

En Yüksek Sayıda Karşılaşılan Renk Değerinin Elde Edilmesi

renk nesnesi üzerinde, değerlere göre azalan şekilde sıralama yapılması gereklidir. Bunun için LINQ ifadesi işimizi oldukça kolaylaştıracaktır.

Sonuç olarak resimdeki baskın, diğer bir deyişle dominant rengi elde eden programın kaynak kodları aşağıdaki şekilde olmaktadır:

 

About Hürkal HÜSEM

2010 yılından bu yana Bilişim Teknolojileri Öğretmeni olarak meslek liselerinde görev yapmaktayım.

View all posts by Hürkal HÜSEM →

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.