C#: Перевод изображения в монохром

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

Возьмем для испытания картинку ниже (котики нынче в моде).

Многим известно, что цвет можно задать тройкой RGB (Прозрачность рассматривать не будем). Значение каждого оттенка занимает байт, а значит лежит в диапазоне от 0 до 255 включительно. (R=0,G=0,B=0 — черный, R=255,G=255,B=255 — белый).

Определим среднее значение всех оттенков по школьной формуле:

K = (R+G+B) / 3
Зададим некоторый порог P из диапазона 0 — 255, и укажем правило, что если среднее значение всех оттенков К <= порога P, то наш пиксель в монохромном изображении будет черный, в противном случае пиксель будет белым.

Реализуем данный алгоритм:

private Bitmap BlachAndWhite(Bitmap bmpImg, int P)
{
  Bitmap result = new Bitmap(bmpImg.Width, bmpImg.Height);
  Color color = new Color();
  try
  {
    for (int j = 0; j < bmpImg.Height; j++)
    {
      for (int i = 0; i < bmpImg.Width; i++)
      {
         color = bmpImg.GetPixel(i, j);
         int K = (color.R + color.G + color.B) / 3;
         result.SetPixel(i, j, K <= P ? Color.Black : Color.White);
      }
    }
  }
  catch (Exception ex)
  {
     MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
  }
  return result;
}

Пример работы:

P=50

P=50

P=120

P=120

P=200

P=200

Запись опубликована в рубрике C# с метками , , , , . Добавьте в закладки постоянную ссылку.