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


Перевод цветов

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

Компонент для сдвига Элемент матрицы
Красный [4][0]
Зеленый [4][1]
Синий [4][2]
Коэффициент альфа [4][3]

 

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

Image            image(L"ColorBars.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();

ColorMatrix colorMatrix = {
   1.0f,  0.0f, 0.0f, 0.0f, 0.0f,
   0.0f,  1.0f, 0.0f, 0.0f, 0.0f,
   0.0f,  0.0f, 1.0f, 0.0f, 0.0f,
   0.0f,  0.0f, 0.0f, 1.0f, 0.0f,
   0.75f, 0.0f, 0.0f, 0.0f, 1.0f};
   
imageAttributes.SetColorMatrix(
   &colorMatrix, 
   ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
   
graphics.DrawImage(&image, 10, 10, width, height);

graphics.DrawImage(
   &image, 
   Rect(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   UnitPixel,
   &imageAttributes);

На приведенном ниже рисунке показаны исходное изображение слева и преобразованное изображение справа.

иллюстрация с четырьмя цветными полосами, а затем одинаковыми полосами с разными цветами

В приведенной ниже таблице перечислены цветовые векторы для четырех полос до и после сдвига красного компонента. Обратите внимание, что, поскольку максимальное значение компонента цвета равно 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)