Практическое руководство. Сдвиг цветов
Сдвиг увеличивает или уменьшает компонент цвета на величину, пропорциональную другому компоненту цвета. Например, рассмотрим преобразование, при котором красный компонент увеличивается на половину значения синего компонента. При таком преобразовании цвет (0,2, 0,5, 1) станет равен (0,7, 0,5, 1). Новый красный компонент — 0,2 + (1/2)(1) = 0,7.
Пример
В следующем примере из файла ColorBars4.bmp создается объект Image. Затем код применяет преобразование сдвига, описанное в предыдущем абзаце, к каждому пикселю изображения.
На следующем рисунке показано исходное изображение слева и изображение со сдвигом справа:
В приведенной ниже таблице перечислены цветовые векторы для четырех полос до и после преобразования сдвига.
Исходная | После сдвига |
---|---|
(0, 0, 1, 1) | (0.5, 0, 1, 1) |
(0.5, 1, 0.5, 1) | (0.75, 1, 0.5, 1) |
(1, 1, 0, 1) | (1, 1, 0, 1) |
(0.4, 0.4, 0.4, 1) | (0.6, 0.4, 0.4, 1) |
Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
float[][] colorMatrixElements = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0.5f, 0, 1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
e.Graphics.DrawImage(image, 10, 10, width, height);
e.Graphics.DrawImage(
image,
new Rectangle(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);
Dim image = New Bitmap("ColorBars.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height
Dim colorMatrixElements As Single()() = _
{New Single() {1, 0, 0, 0, 0}, _
New Single() {0, 1, 0, 0, 0}, _
New Single() {0.5F, 0, 1, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0, 0, 0, 0, 1}}
Dim colorMatrix As New ColorMatrix(colorMatrixElements)
imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, _
ColorAdjustType.Bitmap)
e.Graphics.DrawImage(image, 10, 10, width, height)
e.Graphics.DrawImage(image, New Rectangle(150, 10, width, height), 0, 0, _
width, height, GraphicsUnit.Pixel, imageAttributes)
Компиляция кода
Предыдущий пример предназначен для работы с Windows Forms, и для него необходим объект PaintEventArgse
, передаваемый в качестве параметра обработчику событий Paint. Замените ColorBars.bmp
на имя изображения, имеющегося в системе, и путь к нему.
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по