Как подсчитать пиксели разных цветов в C#

Следующий CountPixels метод подсчитывает пиксели в изображении, который соответствует целевому цвету.

// Возвращает количество совпадающих пикселей.
private int CountPixels(Bitmap bm, Color target_color)
{
    // Прокручиваем пиксели.
    int matches = 0;
    for (int y = 0; y < bm.Height; y++)
    {
        for (int x = 0; x < bm.Width; x++)
        {
            if (bm.GetPixel(x, y) == target_color) matches++;
        }
    }
    return matches;
}

Этот код достаточно прост. Он пропускает пиксели, вызывающие метод GetPixels, чтобы получить цвет каждого пикселя. Затем он сравнивает возвращаемое значение пикселя с целевым цветом.

Единственная странность здесь заключается в том, что метод Color класса Equals, который используется == для определения равенства, обрабатывает именованные цвета по-разному от полученных другими способами, включая цвета, полученные с помощью метода GetPixel. Это означает, что этот метод не будет работать, если вы передадите ему именованный цвет, например Color.Black. Если вы использовали такой цвет, метод не найдет совпадающих пикселей.

Следующий код показывает, как эта программа использует метод CountPixels для подсчета пикселей, которые являются черными или белыми на изображении.

// Подсчитаем черно-белые пиксели.
private void btnCount_Click(object sender, EventArgs e)
{
    Bitmap bm = new Bitmap(picImage.Image);
    int black_pixels =
        CountPixels(bm, Color.FromArgb(255, 0, 0, 0));
    int white_pixels =
        CountPixels(bm, Color.FromArgb(255, 255, 255, 255));
    lblBlack.Text = black_pixels + " black pixels";
    lblWhite.Text = white_pixels + " white pixels";
    lblTotal.Text = white_pixels + black_pixels + " total pixels"; 
}

Источник: http://csharphelper.com/blog/2016/10/count-pixels-of-different-colors-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector