Цвета сдвига
Сдвиг увеличивает или уменьшает компонент цвета на величину, пропорциональную другому компоненту цвета. Например, рассмотрим преобразование, при котором красный компонент увеличивается на половину значения синего компонента. При таком преобразовании цвет (0,2, 0,5, 1) станет равен (0,7, 0,5, 1). Новый красный компонент — 0,2 + (1/2)(1) = 0,7.
В следующем примере создается объект Image из файла ColorBars4.bmp. Затем код применяет преобразование сдвига, описанное в предыдущем абзаце, к каждому пикселю изображения.
Image image(L"ColorBars4.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.5f, 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};
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);
На следующем рисунке показано исходное изображение слева и изображение со сдвига справа.
В следующей таблице показаны цветовые векторы для четырех полос до и после преобразования сдвига.
До преобразования | После сдвига |
---|---|
(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) |