Используйте объект ImageAttributes для преобразования изображения в оттенок сепии в C#

В этом примере был изменен предыдущий пример Использовать объект ImageAttributes для преобразования изображения в монохромный в C# для преобразования изображения в оттенок сепии.

В этом примере используется ColorMatrix, который дает цветовым компонентам результирующего пикселя разные значения, которые перемещают цвет в сторону коричневатого цвета сепии. Если исходными цветовыми компонентами пикселя являются R, G и B, то новые значения компонентов:

new_R = R * 0.393 + G * 0.769 + B * 0.189
new_G = R * 0.349 + G * 0.686 + B * 0.168
new_B = R * 0.272 + G * 0.534 + B * 0.131

Следующий метод ToSepiaTone преобразует изображение в тон сепии.

// Преобразование изображения в оттенок сепии.
private Bitmap ToSepiaTone(Image image)
{
    // Создаем ColorMatrix.
    ColorMatrix cm = new ColorMatrix(new float[][]
    {
        new float[] {0.393f, 0.349f, 0.272f, 0, 0},
        new float[] {0.769f, 0.686f, 0.534f, 0, 0},
        new float[] {0.189f, 0.168f, 0.131f, 0, 0},
        new float[] { 0, 0, 0, 1, 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, преобразуют цветовые компоненты по желанию. См. Пример Использование объекта ImageAttributes для настройки яркости изображения на C# для получения дополнительной информации о том, как работает часть чертежа.

В этом примере изображение преобразуется в оттенок сепии, но вы можете получить некоторые интересные результаты, введя значения в ColorMatrix. Например, следующие значения делают своего рода «фиолетовый тон».

ColorMatrix cm = new ColorMatrix(new float[][]
{
    new float[] {0.300f, 0.066f, 0.300f, 0, 0},
    new float[] {0.500f, 0.350f, 0.600f, 0, 0},
    new float[] {0.100f, 0.000f, 0.200f, 0, 0},
    new float[] { 0, 0, 0, 1, 0},
    new float[] { 0, 0, 0, 0, 1}
});

Источник: http://csharphelper.com/blog/2014/10/use-an-imageattributes-object-to-convert-an-image-to-sepia-tone-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector