Порог цвета к изображению в C#
Пример использует метод ImageAttribute объекта SetGamma для гамма-коррекции изображения. В этом примере используется метод SetThreshold, чтобы применить порог цвета к изображению. Р>
Метод SetThreshold принимает в качестве параметра a float между 0 и 1. Когда вы используете объект ImageAttributes для рисования пикселя, пиксельные цветовые компоненты (по шкале от 0 до 1) сравниваются с пороговым значением. Если компонент больше или равен пороговому значению, он устанавливается в 1. Если компонент меньше порогового значения, он установлен в 0.
Например, предположим, что цветовые компоненты пикселя в масштабе от 0 до 255: R = 128, G = 200 и B = 180. Преобразование этих компонентов в шкалу от 0 до 1 (где 0 & equiv; 0 и 255 & equiv; 1) дает значения компонент R = 0,502, G = 0,784 и B = 0,706.
Теперь предположим, что порог равен 0,75. Для этого пикселя красные и синие компоненты находятся ниже порога, поэтому они меняются на 0. Зеленая компонента находится выше порога, поэтому она установлена в 1. Результат: R = 0, G = 1, B = 0. Преобразование назад к нормальному шкале от 0 до 255, R = 0, G = 255, B = 0, зеленовато-зеленого цвета.
Следующий метод AdjustThreshold применяет порог к изображению.
// Выполните настройку порога на изображении.
private Bitmap AdjustThreshold(Image image, float threshold)
{
// Создаем растровое изображение результата.
Bitmap bm = new Bitmap(image.Width, image.Height);
// Создаем объект ImageAttributes и устанавливаем порог.
ImageAttributes attributes = new ImageAttributes();
attributes.SetThreshold(threshold);
// Нарисуем изображение на новом растровом изображении
// при применении новой ColorMatrix.
Point[] points =
{
new Point(0, 0),
new Point(image.Width, 0),
new Point(0, image.Height),
};
Rectangle rect =
new Rectangle(0, 0, image.Width, image.Height);
using (Graphics gr = Graphics.FromImage(bm))
{
gr.DrawImage(image, points, rect,
GraphicsUnit.Pixel, attributes);
}
// Вернуть результат.
return bm;
}
// Выполните настройку порога на изображении.
private Bitmap AdjustThreshold (изображение изображения, порог поплавка)
{
// Создаем растровое изображение результата.
Растровое изображение bm = новое растровое изображение (image.Width, image.Height);
// Создаем объект ImageAttributes и устанавливаем порог.
Атрибуты ImageAttributes = new ImageAttributes ();
attributes.SetThreshold (порог);
// Нарисуем изображение на новом растровом изображении
// при применении новой ColorMatrix.
Точка [] points =
{
новая точка (0, 0),
новая точка (image.Width, 0),
new Point (0, image.Height),
};
Прямоугольник rect =
новый прямоугольник (0, 0, image.Width, image.Height);
используя (Graphics gr = Graphics.FromImage (bm))
{
gr.DrawImage (изображение, точки, прямоугольник,
GraphicsUnit.Pixel, атрибуты);
}
// Вернуть результат.
return bm;
}
...
Конечным результатом является изображение, содержащее только первичный и вторичный цвета, плюс черный и белый.
