Меняющиеся цвета
Сдвиг увеличивает или уменьшает цветовой компонент на величину, пропорциональную другому компоненту цвета. Например, рассмотрим преобразование, в котором красный компонент увеличивается на одну половину значения синего компонента. При таком преобразовании цвет (0,2, 0,5, 1) станет (0,7, 0,5, 1). Новый красный компонент равен 0,2 + (1/2)(1) = 0,7.
В следующем примере создается объект изображенияиз файла 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) |