30 Temmuz 2010 Cuma

C# ile resimdeki bir alanın baskın rengini bulma






















Resimlerden oluşan resimler yaratmada kullanılabilecek bir kod.
Örneğin; büyük resim küçük bölgelere ayrılarak, her bölgenin renk yoğunluğu bulunabilir ve renk yoğunluğu önceden bulunan değere uyan daha küçük resimler bu bölgelere yerleştirilebilir.


input bitmap formatındaki image bilgisini,
x1 bitmapteki alanın sol üst köşeden itibaren başlangıç yatay koordinatı,
y1 bitmapteki alanın sol üst köşeden itibaren başlangıç dikey koordinatı,
x2 bitmapteki alanın sol üst köşeden itibaren bitiş yatay koordinatı,
y2 bitmapteki alanın sol üst köşeden itibaren bitiş dikey koordinatı,
göstermektedir.

public static Color ImageColorDensity(Bitmap input,int x1,int y1,int x2,int y2)
        {


            long tempRed = 0;
            long tempGreen = 0;
            long tempBlue = 0;
            Color pixel;


            for (int r = y1; r < y2; r++)
            {
                for (int c = x1; c < x2; c++)
                {


                    pixel = input.GetPixel(c,r);
                    tempRed += Convert.ToInt32(pixel.R);
                    tempGreen += Convert.ToInt32(pixel.G);
                    tempBlue += Convert.ToInt32(pixel.B);
                  
                }
            }


            int avarage=(y2-y1) * (x2-x1);
            tempRed /= avarage;
            tempGreen /= avarage;
            tempBlue /= avarage;
            Color outputColor=Color.FromArgb((int)tempRed, (int)tempGreen, (int)tempBlue);
            return outputColor;
        }

Hiç yorum yok:

Yorum Gönder