Используйте объект ImageAttributes для преобразования изображения в оттенки красного, зеленого или синего в C#
В этом примере используются методы, описанные Используйте объект ImageAttributes для настройки яркости изображения на C# , чтобы преобразовать изображение в оттенки красного, зеленого или синего. Предыдущий пример масштабировал компоненты красного, зеленого и синего цвета каждого пикселя на ту же сумму. Этот пример масштабирует два из трех компонентов в 0 раз, чтобы выбить их. Результат - красное, зеленое или синее изображение.
Следующий ScaleColorComponents метод масштабирует красные, зеленые и синие цветовые компоненты изображения.
// Масштабирование цветовых компонентов изображения. private Bitmap ScaleColorComponents(Image image, float r, float g, float b, float a) { // Создаем ColorMatrix. ColorMatrix cm = new ColorMatrix(new float[][] { new float[] {r, 0, 0, 0, 0}, new float[] {0, g, 0, 0, 0}, new float[] {0, 0, b, 0, 0}, new float[] {0, 0, 0, a, 0}, new float[] {0, 0, 0, 0, 1}, }); ImageAttributes attributes = new ImageAttributes(); attributes.SetColorMatrix(cm); // Нарисуем изображение на новом растровом изображении при применении // новая 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); // Создаем растровое изображение результата. Bitmap bm = new Bitmap(image.Width, image.Height); using (Graphics gr = Graphics.FromImage(bm)) { gr.DrawImage(image, points, rect, GraphicsUnit.Pixel, attributes); } // Вернуть результат. return bm; }
Ключ - это объект ColorMatrix. Он похож на идентифицирующую матрицу, за исключением записи, которая масштабирует компоненты масштабирования пикселей, для масштабирования компонентов красного, зеленого и синего цветов. См.
В примере используется метод, как в следующем коде, который удаляет из изображения зеленые и синие компоненты.
picRed.Image = ScaleColorComponents(picOriginal.Image, 1, 0, 0, 1);
Программа передает метод значениям 0 и 1 либо удалять компонент цвета, либо оставлять его неизменным, но вы можете получить некоторые интересные результаты, используя другие значения. Например, попробуйте следующий код.
picRed.Image = ScaleColorComponents(picOriginal.Image, 1, 0, 1, 1);