Гамма-коррекция изображения в C#
Гамма-коррекция или просто гамма - это нелинейное изменение красных, зеленых и синих компонентов пикселей в изображении. Сообщение
Например, предположим, что вы осветляете изображение. Яркие области изображения, вероятно, не нуждаются в таком ярком свете, как темные области. И наоборот, если вы затемняете изображение, темные области, вероятно, не нуждаются в таком темном, как яркие области.
Коррекция гаммы регулирует яркость изображения неравномерно, поэтому яркие области не вымываются, а темные области не такие темные. Подробнее о гамма-коррекции см. На странице Википедии
Вы можете прокручивать пиксели изображения и выполнять гамма-коррекцию для каждого из них, но объект 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 и возвращает результат. См. Пример