Используйте объект ImageAttributes для применения общих цветовых тонов к изображению в C#
В этом примере используются методы, аналогичные тем, которые описаны в post Используйте объект ImageAttributes для преобразования изображения в оттенки красного, зеленого или синего в C# , чтобы применить общие цветовые тона к изображению , Он обобщает эти методы для настройки тонов изображения в соответствии с целевым цветом (аналогично сепии или фиолетовому в предыдущих сообщениях). Например, на рисунке справа программа корректирует изображение для использования желтых тонов.
Используйте полосы прокрутки для выбора целевого цвета. Перемещение цветов изображения в сторону целевого цвета может изменить общую яркость изображения, поэтому программа также включает полосу прокрутки яркости, которую вы можете использовать для настройки результата. (Возможно, есть способ рассчитать корректировку, которая оставит яркость неизменной, но это решение оказалось проще.)
Следующий код показывает, как эта программа создает объект ColorMatrix.
float scale = scrBright.Value / 128f; float r = color.R / 255f * scale; float g = color.G / 255f * scale; float b = color.B / 255f * scale; // Создаем 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, 1, 0}, new float[] {0, 0, 0, 0, 1} });
Код делит значения яркости на 128, чтобы получить коэффициенты масштабирования яркости. Полоса прокрутки может принимать значения от 0 до 255, поэтому этот масштабный коэффициент находится в диапазоне от 0 до примерно 2.
Затем программа принимает красные, зеленые и синие компоненты целевого цвета и делит их на 255 (наибольшее значение, разрешенное их полосами прокрутки), чтобы получить значение от 0 до 1. Затем оно масштабирует результаты по коэффициент яркости.
Программа подключает результирующие масштабные коэффициенты к ColorMatrix. В основном это масштабирует цветовые компоненты каждого пикселя по отношению к отношениям, используемым целевым цветом (с учетом яркости).
Создав объект ColorMatrix, код создает объект ImageAttributes и использует его для рисования изображения. См. Пример