Поделиться через


Практическое руководство. Преобразование цветов изображения

Обновлен: Ноябрь 2007

Преобразование добавляет некоторое значение к одному или нескольким из четырех компонентов цвета. Элементы матрицы цветов, соответствующие преобразованиями, приводятся в следующей таблице.

Преобразуемый компонент

Элемент матрицы

Красный

[4][0]

Зеленый

[4][1]

Синий

[4][2]

Альфа

[4][3]

Пример

В следующем примере объект Image создается на основе файла ColorBars.bmp. После этого к красному компоненту каждой из точек изображения добавляется значение 0,75. Исходное изображение отображается вместе с преобразованным изображением.

На следующем рисунке показаны как исходное изображение (слева), так и преобразованное изображение (справа).

Преобразовать цвета

В следующей таблице приводятся цветовые векторы четырех полос до и после преобразования. Обратите внимание, что поскольку наибольшее значение компонента цвета равно 1, красный компонент во второй строке не меняется. (Аналогично наименьшим значением компонента цвета является 0.)

До преобразования

После преобразования

Черный (0, 0, 0, 1)

(0.75, 0, 0, 1)

Красный (1, 0, 0, 1)

(1, 0, 0, 1)

Зеленый (0, 1, 0, 1)

(0.75, 1, 0, 1)

Синий (0, 0, 1, 1)

(0.75, 0, 1, 1)

Dim image As 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, 0, 1, 0, 0}, _
   New Single() {0, 0, 0, 1, 0}, _
   New Single() {0.75F, 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)

' Pass in the destination rectangle (2nd argument), the upper-left corner 
' (3rd and 4th arguments), width (5th argument),  and height (6th 
' argument) of the source rectangle.
e.Graphics.DrawImage( _
   image, _
   New Rectangle(150, 10, width, height), _
   0, 0, _
   width, _
   height, _
   GraphicsUnit.Pixel, _
   imageAttributes)

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,  0,  1,  0, 0},
   new float[] {0,  0,  0,  1, 0},
   new float[] {.75f, 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);

Компиляция кода

Предыдущий пример предназначен для работы с Windows Forms, для него необходим объект PaintEventArgse, передаваемый в качестве параметра обработчику события Paint. Замените путь и имя файла ColorBars.bmp именем файла изображения в вашей системе.

См. также

Ссылки

ColorMatrix

ImageAttributes

Другие ресурсы

Объекты Graphics и Drawing в Windows Forms

Перекрашивание изображений