Resmi Pikselleştirme

   Bir önceki makalemde birlikte renkli bir görüntüyü işleyerek gri tonlanmış bir hale dönüştürmüştük. Hazır konusu açılmışken ikinci bir görüntü işleme yöntemi olan pikselleştirmeden de bahsetmek istiyorum.

   Pikselleştirme, belirli bir alan içerisindeki her bir pikselin ortak bir rengi almasıdır; ki bu aynı zamanda görüntüdeki detaylarında kaybolması anlamına gelecektir. Gri tonlama işlemi her bir piksel üzerinde ayrı ayrı yapılıyorken, pikselleştirme işlemi resmin bütününde yapılmaktadır. Aynı gri tonlamada gibi pikselleştirme de zor bir işlem değildir.

Pikselleştirme işlemi sonrası oluşan görüntü

   İşleme başlarken, öncelikle nihai görüntüyü saklayacağımız Bitmap nesnemizi oluşturmalıyız;

var goruntuGenislik = orjinalGoruntu.Width;
var goruntuYukseklik = orjinalGoruntu.Height;
 
var piksellestirilmisGoruntu = new Bitmap(goruntuGenislik, goruntuYukseklik);

   Ardından pikselleştirme için önceden karar verdiğimiz boyutlar çerçevesinde orjinal görüntü pikselleri içerisinde dolaşmaya başlayalım;

for (var i = 0; i < goruntuGenislik; i += pikselBoyutu) {
    for (var j = 0; j < goruntuYukseklik; j += pikselBoyutu) {
    //...   
}
}

   Devamında da belirlediğimiz boyut ile oluşturduğumuz alan içerisinde merkezdeki piksel’i alalım. Bu piksel daha sonra sonuç görüntümüzde bu alana denk gelen pikseller için kullanacağımız rengi belirlememize yardımcı olacak.

xOfseti = yOfseti = pikselBoyutu / 2;
 
if (i + xOfseti >= goruntuGenislik) {
    xOfseti = goruntuGenislik - i - 1;
}
 
if (j + yOfseti >= goruntuYukseklik) {
    yOfseti = goruntuYukseklik - j - 1;
}
 
var piksel = orjinalGoruntu.GetPixel(i + xOfseti, j + yOfseti);

   Dikkat ettiyseniz belirlediğimiz alanın ortasındaki piksel’in koordinatlarını hesaplarken aynı zamanda koordinatların görüntümüz sınırları içerisinde kaldığından da emin oluyoruz.

   Son olarak, alanımız içerisindeki diğer pikselleri de aynı renge boyuyoruz;

for (var x = i; x < i + pikselBoyutu && x < goruntuGenislik; x++) {
    for (var y = j; y < j + pikselBoyutu && y < goruntuYukseklik; y++) {
        piksellestirilmisGoruntu.SetPixel(x, y, piksel);
    }
}

   Orjinal görüntümüzdeki tüm pikseller için aynı işi tekrarlamamız sonrasında istediğimiz pikselleşmiş görüntüyü elde ediyor olacağız.

Orjinal ve pikselleştirilmiş görüntüler

   Yaptığımız işlemleri toparlayacak olursak, elimizde aşağıdaki gibi nihai bir kod parçacığı oluşacaktır;

int xOfseti, yOfseti; 
var pikselBoyutu = 15;
 
var orjinalGoruntu = new Bitmap(pbOrjinal.Image);
var goruntuGenislik = orjinalGoruntu.Width;
var goruntuYukseklik = orjinalGoruntu.Height;
 
var piksellestirilmisGoruntu = new Bitmap(goruntuGenislik, goruntuYukseklik);
 
for (var i = 0; i < goruntuGenislik; i += pikselBoyutu) {
    for (var j = 0; j < goruntuYukseklik; j += pikselBoyutu) {
        xOfseti = yOfseti = pikselBoyutu / 2;
 
        if (i + xOfseti >= goruntuGenislik) {
            xOfseti = goruntuGenislik - i - 1;
        }
 
        if (j + yOfseti >= goruntuYukseklik) {
            yOfseti = goruntuYukseklik - j - 1;
        }
 
        var piksel = orjinalGoruntu.GetPixel(i + xOfseti, j + yOfseti);
 
        for (var x = i; x < i + pikselBoyutu && x < goruntuGenislik; x++) {
            for (var y = j; y < j + pikselBoyutu && y < goruntuYukseklik; y++) {
                piksellestirilmisGoruntu.SetPixel(x, y, piksel);
            }
        }
    }
}
 
pbGri.Image = piksellestirilmisGoruntu;

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

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