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


Меняющиеся цвета

Сдвиг увеличивает или уменьшает цветовой компонент на величину, пропорциональную другому компоненту цвета. Например, рассмотрим преобразование, в котором красный компонент увеличивается на одну половину значения синего компонента. При таком преобразовании цвет (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)