转换颜色

转换操作将值添加到四个颜色分量中的一个或多个分量。 下表提供了表示转换的颜色矩阵条目。

要转换的分量 矩阵条目
Red [4][0]
绿色 [4][1]
蓝色 [4][2]
Alpha [4][3]

 

以下示例从 文件ColorBars.bmp构造 Image 对象。 然后,代码将 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)