剪切颜色

切变可按照与另一个颜色分量成比例的量增加或减少某个颜色分量。 例如,假设有一种转换将红色分量增加蓝色分量值的一半。 在这种转换下,颜色 (0.2, 0.5, 1) 将变为 (0.7, 0.5, 1)。 新的红色分量为 0.2 + (1/2)(1) = 0.7。

以下示例从 ColorBars4.bmp 文件构造 Image 对象。 然后,代码将上一段中所述的切变转换应用于图像中的每一个像素。

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)