Используйте объект 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);

Источник: http://csharphelper.com/blog/2014/10/use-an-imageattributes-object-to-convert-an-image-to-shades-of-red-green-or-blue-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector