Быстрое преобразование изображения в оттенки серого в C#

В этом примере показано, как можно быстро преобразовать изображение в оттенки серого с помощью класса Bitmap32, описанного в сообщении Используйте класс Bitmap32 для быстрого управления пикселями изображения на C# . Метод ConvertBitmapToGrayscale, показанный в следующем коде, выполняет преобразование.

// Преобразование растрового изображения в оттенки серого.
private void ConvertBitmapToGrayscale(Bitmap bm, bool use_average)
{
    // Создаем объект Bitmap24.
    Bitmap32 bm32 = new Bitmap32(bm);

    // Заблокируем растровое изображение.
    bm32.LockBitmap();

    // Обработать пиксели.
    for (int x = 0; x < bm.Width; x++)
    {
        for (int y = 0; y < bm.Height; y++)
        {
            byte r = bm32.GetRed(x, y);
            byte g = bm32.GetGreen(x, y);
            byte b = bm32.GetBlue(x, y);
            byte gray = (use_average ?
                (byte)((r + g + b) / 3) :
                (byte)(0.3 * r + 0.5 * g + 0.2 * b));
            bm32.SetPixel(x, y, gray, gray, gray, 255);
        }
    }

    // Разблокируем растровое изображение.
    bm32.UnlockBitmap();
}

Код сначала создает объект Bitmap32 для управления растровым изображением и блокирует объект, чтобы он мог начать работу.

Затем код перемещается по пикселям изображения. Если параметр use_average true, то код делает значение нового пикселя простым простейшим компонентом цветовых компонентов исходного пикселя. Если use_average - false, метод использует средневзвешенное значение. Во многих случаях вы не будете знать разницу.

После обработки пикселов код разблокирует объект Bitmap32.

Источник: http://csharphelper.com/blog/2014/10/quickly-convert-an-image-to-grayscale-in-c/

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