Bitmap Sınıfı, RGB ve DPI Kavramı

0

AFORGE Kütüphanesi Ve Filtreleri konulu yazımdan sonra Bitmap Sınıfı, RGB ve DPI kavramları ile ilgili detaylı bilgiler vermek istiyorum.

Yazımını bu bölümünde; görüntü işleme yaparken kullanacağımız bitmap sınıfını, RGB ve dpi kavramını inceleyeceğiz.

DPI Nedir?

Dpi : Dots per inch , Bir inç karedeki nokta sayısı demektir. 1 inç yani 25.4 mm uzunluk için nokta adedi anlamına gelir. Diğer bir ifade ile 1 mm için 15.7 noktadır.

Çözünürlük yükseldikçe görüntü kalitesi doğru orantılı olarak yükselir. Örneğin çözünürlüğü 600×600 dpi olan bir görüntü ya da bir tarayıcı tarafından taranan bir dokümanın eni ve boyu her inch için 600 nokta ile taranmış, baskılarda ise baskı yapılmış anlamına gelmektedir.

Bir örnekle açıklamak gerekirse;

400 dpi’ nın milimetrik karşılığı 1 mm de 15.7 noktadır. Örnek olarak, 500 mm boyu 300 mm eni olan bir fotoğrafı tarayıcı vasıtası ile taratalım.

Tarama yoğunluğu enine 500×15.7=7850 nokta, boyuna 300×15.7=4710 noktadır. Buna göre bu boyuttaki taramada toplam nokta sayısı 7850×4710=36,973500 noktadır.

Bir bitmap resminin dpi değeri aşağıdaki kod örneği ile bulabilirsiniz.

float dikeydpi=bmp.VerticalResolution;
float yataydpi = bmp.HorizontalResolution;

 

Dpi kavramı
DPI’ları faklı aynı boyuttaki iki resiminden, dpi’i yüksek olan daha fazla nokta ile gösterilir.
DPI'ı yüksek olan resim daha kalitelidir.
DPI’ı yüksek olan resim daha kalitelidir.

RGB Nedir?

İngilizcedeki ‘Red’ ‘Green’ ‘Blue’, yani ‘Kırmızı’ ‘Yeşil’ ‘Mavi’ kelimelerinin baş harflerinden ismini alan bir renk uzayı olup en sık kullanılanlardandır.

Işığı temel alarak, doğadaki tüm renklerin kodları bu üç temel renge referansla belirtilir. Her renk %100 oranında karıştırıldığında beyaz ve %0 oranında karıştırıldığında ise siyah elde edilir.

Bu uzayda, ana renkler olan kırmızı, mavi ve yeşil belirtilmediği için, bu ana renklerin tanımı değiştikçe, tüm renkler değişir.

Bir bitmap nesnesinde ilgili pixeli RGB değerlerini bulunabilir.

Color c = bmp.GetPixel(100, 20);
byte r=c.R;//red değeri
byte g=c.G;//green değeri
byte b=c.B;//blue değeri

Bitmap Sınıfı Nedir?

C# dilinde bitmap sınıfı ,resimler üzerinde işlem yapmamızı sağlayan ve içerisinde işimizi kolaylaştıracak birçok methodu olan bir sınıftır. Bir bitmap nesnesi aşağıdaki kod parçacığı ile tanımlanabilir. 

String dosyakonumu;
Bitmap bmp = new Bitmap(dosyakonumu); 

Belirtilen dosya konumundan resmi alarak üzerinde işlem yapmamızı sağlayacaktır.

Bitmap nesnesinin 12 tane kurucu methodu vardır.

Herhangi bir resim üzerinde işlem yapmayıp kendi resmimizi oluşturmak istiyorsak;

Bitmap  bmp = new Bitmap(2480,3500);

Şeklinde resmin width ve height değerini vererek oluşturabiliriz. Dilersek aşağıdaki kodu kullanarak oluşturduğumuz resmin pixel formatını da belirleyebiliriz.

Bitmap bmp = new Bitmap(2480,3500,PixelFormat.Format24bppRgb);

Resmi oluşturduktan sonra dpi değerini belirlemek istersek aşağıdaki kodu kullanabiliriz.

bmp.SetResolution(300,300);

Oluşturduğumuz resmin arka planını ise FillRectangle kullanarak istediğimiz renge boyayabiliriz.

 using (Graphics grp = Graphics.FromImage(bmp))
{
  grp.FillRectangle( Brushes.White, 0, 0, bmp.Width, bmp.Height);
}

Bir bitmap nesnesini transparan yapmak istiyorsak ;

bmp.MakeTransparent();

methodunu kullanabiliriz. Bir Resmin herhangi bir pixelde rengini değiştirmek istiyorsak setpixel methodunu kullanabiliriz.Örnek olarak;

Color mavi = Color.Blue;
bmp.SetPixel(100,200,mavi);

yaparsak yukarıda x=100 ve y=200 pixelin rengini mavi renge çevirmiş olur.

Eğer oluşturduğumuz resmi kaydetmek istersek save methodunu kullanırız. Resim kaydedileceği dosya yolunu girdikten sonra nokta kullanarak resmin hangi formatta kaydedileceğini belirleriz.

bmp.Save("resim.jpg");

Oluşturduğumuz her resim bellekte bir yer kaplamaktadır. Tek resim üzerinde çalışıyorsak resmin bellekte olup olmaması çok önemli olmayabilir ancak 10000 resmin üzerinde çalışıyorsak kullandığımız resmin işi bittiği anda bellekten silmeliyiz.

Eğer bellekte yer kaplamaya devam ederse ve sistem belleğinin boyutunu aşarsa OutOfMemoryException hatası alırız.

Bu hatadan kaçınmak için işimiz bittiği anda

bmp.Dispose();

kodunu kullanarak resmi bellekten silmeliyiz.

Bir bitmap resmini kırpmak için bitmap nesnesi içinde bulunan Clone fonksiyonu kullanılır. Bu fonksiyon iki parametre alır. İlk olarak bir Rectangle  nesnesi ve 2.parametre olarak da PixelFormat alır.

Bir resmin belirli bir bölümü kırpmak istiyorsak rectangle değerlerini resmi kırpacağımız bölüme göre ayarlamalıyız. Resmi kırparken 2. Parametre ile resmin pixel formatını da değiştirebiliriz

Örnekte resmi ortadan ikiye bölen ve pixel formatını 24 olarak yapan kod bloğu verilmiştir.

Rectangle rct2 = new Rectangle(0, 0, bmp.Width, bmp.Height/2);
bmp = bmp.Clone(rct2, PixelFormat.Format24bppRgb); 

Resmi kırpmadan sadece pixel formatını değiştirmek için de aşağıdaki kod kullanılır.

Rectangle rct2 = new Rectangle(0, 0, bmp.Width, bmp.Height);
bmp = bmp.Clone(rct2, PixelFormat.Format24bppRgb);

Bu bölümde Bitmap sınıfının en çok kullanılan özellikleri üzerinde durulmuştur. Tabi ki işimizi kolaylaştıracak bir çok methodu vardır. İhtiyaça göre araştırılıp kullanılabilir.

Bir sonraki yazıda görüşmek dileğiyle…

CEVAP VER

Lütfen yorum giriniz!
Lütfen isminizi giriniz