Быстрое преобразование изображения в оттенки серого в 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.
