Как преобразовать растровое изображение в черно-белое в С#?

Возможный дубликат:конвертировать изображение в черно-белое или сепия в С#

Я пишу приложение С#, которое открывает изображение, и нажимая на кнопку, отображает его только черно-белым! Я был уверен, что найду много информации в сети, но мои поиски не дали мне много понятной и полезной информации.

Я понятия не имею, как действовать. Есть ли у кого-нибудь совет? Знать учебник в сети?

3 ответа

Однажды я нашел функцию, которая преобразует растровое изображение в оттенки серого

public Bitmap GrayScale(Bitmap Bmp)
{
 int rgb;
 Color c;
 for (int y = 0; y < Bmp.Height; y++)
 for (int x = 0; x < Bmp.Width; x++)
 {
 c = Bmp.GetPixel(x, y);
 rgb = (int)((c.R + c.G + c.B) / 3);
 Bmp.SetPixel(x, y, Color.FromArgb(rgb, rgb, rgb));
 }
 return Bmp;
}

Функция принимает битмап в качестве параметра и возвращает растровое изображение в оттенках серого.

Надеюсь, это поможет.


Изменить. Здесь более полный ответ: конвертировать изображение в черно-белое или сепия в С#.

Существует много способов обесцветить цветное изображение. На самом деле, вероятно, нет ни одного "истинного" или "правильного" способа сделать это, хотя каким-то образом правильнее других. Я предполагаю, что ваше изображение находится в формате RGB (Red-Green-Blue) (хотя BGR также распространен).

Самый простой способ, который должен работать для большинства фотографий (но, тем не менее, для синтетических изображений), - это просто использовать зеленый канал из 3 каналов RGB. Люди наиболее чувствительны к изменениям в зеленой части спектра, поэтому зеленый канал покрывает большую часть видимого диапазона и является хорошим приближением к полутоновому изображению, которое вы хотите.

Лучший способ генерации изображения в градациях серого - использовать средневзвешенное значение для 3 каналов RGB. Выбор равных весов (0,33 * R + 0,33 * G + 0,33 * B) даст довольно хорошее изображение в оттенках серого. Другая масса даст разные результаты, некоторые из которых могут считаться более эстетически приятными, а некоторые могут принимать во внимание перцепционные параметры.

Вы всегда можете преобразовать изображение в другое цветовое пространство, которое имеет только один канал в оттенках серого (и 2 "цветных канала), например, HSV (V - оттенки серого), YUV (Y - оттенки серого) или Lab (L это оттенки серого). Различия не должны быть очень большими.

Термин "дезатурация" происходит из пространства HSV. Если вы конвертируете изображение в HSV, установите для S-канала (Saturation) все нули и сделайте изображение, вы получите 3-канальное ненасыщенное "цветное" изображение.

licensed under cc by-sa 3.0 with attribution.