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