缩放颜色

缩放转换将四个颜色分量中的一个或多个分量乘以一个数字。 下表提供了表示缩放的颜色矩阵条目。

要缩放的分量 矩阵条目
Red [0][0]
绿色 [1][1]
蓝色 [2][2]
Alpha [3][3]

 

以下示例从 文件ColorBars2.bmp构造 Image 对象。 然后,代码将图像中每个像素的蓝色分量缩放 2 倍。 原始图像绘制在转换后的图像旁边。

Image            image(L"ColorBars2.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, 2.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.8 变为 0.6。 这是因为 GDI+ 只保留结果的小数部分。 例如,(2)(0.8) = 1.6,1.6 的小数部分为 0.6。 仅保留小数部分可确保结果始终处于 [0, 1] 区间内。

原始 缩放后
(0.4, 0.4, 0.4, 1) (0.4, 0.4, 0.8, 1)
(0.4, 0.2, 0.2, 1) (0.4, 0.2, 0.4, 1)
(0.2, 0.4, 0.2, 1) (0.2, 0.4, 0.4, 1)
(0.4, 0.4, 0.8, 1) (0.4, 0.4, 0.6, 1)

 

以下示例从 文件ColorBars2.bmp构造 Image 对象。 然后,代码缩放图像中每个像素的红色、绿色和蓝色分量。 红色分量缩小 25%,绿色分量缩小 35%,蓝色组件分量缩小 50%。

Image            image(L"ColorBars.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();

ColorMatrix colorMatrix = {
   0.75f, 0.0f,  0.0f, 0.0f, 0.0f,
   0.0f,  0.65f, 0.0f, 0.0f, 0.0f,
   0.0f,  0.0f,  0.5f, 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.6, 0.6, 0.6, 1) (0.45, 0.39, 0.3, 1)
(0, 1, 1, 1) (0, 0.65, 0.5, 1)
(1, 1, 0, 1) (0.75, 0.65, 0, 1)
(1, 0, 1, 1) (0.75, 0, 0.5, 1)