Makale Özeti

Bu makalemde bir resme nasıl pikselleştirme efekti uygulayabileceğimizi sizlerle paylaşıyorum.

Makale

   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.

 

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

   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

http://www.enterprisecoding.com
http://twitter.com/fatihboy