Используйте объект 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, преобразуют цветовые компоненты по желанию. См. Пример для получения дополнительной информации о том, как работает часть чертежа.
В этом примере изображение преобразуется в оттенок сепии, но вы можете получить некоторые интересные результаты, введя значения в 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}
});
