Гамма-коррекция изображения в C#
Гамма-коррекция или просто гамма - это нелинейное изменение красных, зеленых и синих компонентов пикселей в изображении. Сообщение , объясняет, как использовать объекты ImageAttributes и ColorMatrix для настройки яркости изображения. Поскольку он масштабирует яркость каждого пикселя на один и тот же коэффициент, результат может сделать яркие области слишком яркими, а темные области слишком темными.
Например, предположим, что вы осветляете изображение. Яркие области изображения, вероятно, не нуждаются в таком ярком свете, как темные области. И наоборот, если вы затемняете изображение, темные области, вероятно, не нуждаются в таком темном, как яркие области.
Коррекция гаммы регулирует яркость изображения неравномерно, поэтому яркие области не вымываются, а темные области не такие темные. Подробнее о гамма-коррекции см. На странице Википедии .
Вы можете прокручивать пиксели изображения и выполнять гамма-коррекцию для каждого из них, но объект ImageAttributes может выполнять гамма-коррекцию для вас гораздо быстрее.
Следующий метод AdjustGamma выполняет гамма-коррекцию изображения.
// Выполните гамма-коррекцию изображения.
private Bitmap AdjustGamma(Image image, float gamma)
{
// Устанавливаем гамма-значение объекта ImageAttributes.
ImageAttributes attributes = new ImageAttributes();
attributes.SetGamma(gamma);
// Нарисуем изображение на новом растровом изображении
// при применении нового значения гаммы.
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);
// Создаем растровое изображение результата.
Bitmap bm = new Bitmap(image.Width, image.Height);
using (Graphics gr = Graphics.FromImage(bm))
{
gr.DrawImage(image, points, rect,
GraphicsUnit.Pixel, attributes);
}
// Вернуть результат.
return bm;
}
Этот код создает объект ImageAttributes и использует его метод SetGamma для установки значения коррекции гаммы. Это значение должно быть больше 0,0. Типичные значения варьируются от 1 до 2.2.
После инициализации объекта ImageAttributes программа использует его для рисования исходного изображения в результате Bitmap и возвращает результат. См. Пример для получения дополнительной информации о том, как работает часть чертежа.
