ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode


Преобразование цветного изображения в черно-белое C#


В статье рассмотрим алгоритм перевода цветного изображения в черно-белое и напишем его реализацию на языке C#. Приводится исходный код программы, написанной в Visual Studio — приложение Windows Forms.

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

Алгоритм преобразования в черно-белое изображение

Каждый пиксель изображения формируется при помощи сочетания четырех каналов: ARGB (Alpha, Red, Green, Blue), альфа-канала, красного, зеленого и синего.

Альфа-канал отвечает за прозрачность пикселя (100% — пиксель полностью непрозрачный, 0% — полностью прозрачный).

Сочетание значений RGB каналов определяет цвет пикселя.

Каждый канал несёт в себе 8 бит информации (1 байт), соответственно интенсивность канала может меняться в диапазоне от 0 до 255. Полностью пиксель занимает в памяти 32 бита (4 байта).

Для того, чтобы преобразовать цветное изображение в черно-белое, нужно найти среднее арифметическое значение R, G и B каналов пикселя и затем это значение присвоить RGB каналам этого же пикселя (то есть оно будет одинаковое). Альфа-канал оставляем без изменений.

Такую операцию нужно проделать с каждым пикселем изображения.

Программа для преобразования цветного изображения в черно-белое

Приступим к написанию приложения Windows Forms в среде разработки Visual Studio на языке программирования C#.

Создадим новый проект программы и разместим на форме 3 кнопки (Button) и два контейнера под изображения PictureBox. Кнопки понадобятся для: открытия изображения, преобразования в черно-белое (в оттенки серого) и сохранения преобразованной картинки на компьютер.

Свойства кнопок Text изменим на:

  • Открыть
  • Ч/Б
  • Сохранить

Имена кнопок (Name), используемые при разработке, изменим на:

  • openButton
  • grayButton
  • saveButton

Размеры обоих PictureBox (Size) сделаем равными 400 x 400 пикселей.

Чтобы вокруг границ PictureBox отображалась рамка в виде сплошной тонкой линии, установим значение свойства BorderStyle в положение FixedSingle.

Также у PictureBox свойство SizeMode сделаем равным Zoom. Данная настройка позволит автоматически масштабировать отображаемые изображения в соответствии с размером PictureBox, при этом сохраняя соотношения сторон исходной картинки.

Интерфейс программы для преобразования изображения в черно-белое


Перейдём к написанию кода. Сначала закодируем обработку нажатий кнопок «Открыть» и «Сохранить»:

Подробнее про открытие и сохранение картинки из PictureBox можно прочитать в соответствующих статьях на нашем сайте:

Как загрузить картинку в PictureBox C#

Сохранить изображение из PictureBox C#

Теперь напишем код кнопки, преобразующей цветное изображение в оттенки серого:

Отдельно следует сказать про хранение значения пикселя в программе и про получение значений отдельных каналов.

Пиксель мы храним в структуре UInt32. Она предназначена для хранения беззнакового целого 4-х байтового (32 бита) числа. Диапазон значений такого числа от 0 до 232 — 1; такой диапазон идеально подходит для хранения значения пикселя — он туда помещается полностью, поскольку занимает также 32 бита.

Для получения значения конкретного канала используется побитовое умножение значения пикселя на битовую маску для соответствующего цвета с последующим сдвигом вправо на нужное количество бит (строки 17-19).

Сборка пикселя из каналов воедино происходит с использованием операций сдвига влево (для каждого канала) и последующим логическим сложением всех компонент (строка 23). Альфа-канал примем равным 0xFF000000 (FF16 = 25510).

Проверим работу программы:

Преобразование цветного изображения в черно-белое C#

Исходник программы и репозиторий на GitHub:

Скачать исходник Репозиторий проекта на GitHub

 

 

Также посмотрите видеоурок, в котором мы дополнительно объясняем написание программы для преобразования цветного изображения в оттенки серого (черно-белое):

4.7/5 - (12 голосов)



Поделиться в соц. сетях:

Один комментарий к статье “Преобразование цветного изображения в черно-белое C#

Добавить комментарий

Ваш адрес email не будет опубликован.