ImageAttributes::ClearColorMatrices 方法 (gdiplusimageattributes.h)

ImageAttributes::ClearColorMatrices 方法清除指定类别的颜色调整矩阵和灰度调整矩阵。

语法

Status ClearColorMatrices(
  [in, optional] ColorAdjustType type
);

parameters

[in, optional] type

类型: ColorAdjustType

ColorAdjustType 枚举的元素,该元素指定清除调整矩阵的类别。 默认值为 ColorAdjustTypeDefault

返回值

类型: 状态

如果该方法成功,则返回 Ok,这是 Status 枚举的元素。

如果方法失败,它将返回 Status 枚举的其他元素之一。

注解

ImageAttributes 对象维护五个调整类别的颜色和灰度设置:默认、位图、画笔、笔和文本。 例如,可以为默认类别指定一对 (颜色和灰度) 调整矩阵,为位图类别指定另一对调整矩阵,为笔类别指定另一对调整矩阵。

默认的颜色和灰度调整设置适用于没有自己调整设置的所有类别。 例如,如果从未为笔类别指定任何调整设置,则默认设置适用于笔类别。

为特定类别指定颜色或灰度调整设置后,默认调整设置将不再应用于该类别。 例如,假设指定一对 (调整矩阵的颜色和灰度) ,并为默认类别指定一个伽玛值。 如果通过调用 ImageAttributes::SetColorMatrices 为笔类别设置一对调整矩阵,则默认调整矩阵将不适用于笔。 如果稍后通过调用 ImageAttributes::ClearColorMatrices 清除笔调整矩阵,则笔类别不会还原默认调整矩阵;而笔类别将没有调整矩阵。 同样,笔类别不会还原默认伽玛值;相反,笔类别将没有伽玛值。

示例

以下示例从 .emf 文件创建 Image 对象。 该代码还会创建 ImageAttributes 对象。 首次调用 ImageAttributes::SetColorMatrices 设置 ImageAttributes 对象的默认颜色调整矩阵和默认灰度调整矩阵。 第二次调用 ImageAttributes::SetColorMatrices 设置 ImageAttributes 对象的笔颜色调整矩阵和笔灰度调整矩阵。 这四个矩阵的执行方式如下:

  • 默认颜色:将红色分量乘以 1.5。
  • 默认灰度:将绿色分量乘以 1.5。
  • 笔颜色:将蓝色分量乘以 1.5。
  • 笔灰度:将红色、绿色和蓝色分量乘以 1.5。

代码调用 DrawImage 一次,无需颜色调整就绘制图像。 然后,代码再调用 DrawImage 三次,每次传递 Image 对象的地址和 ImageAttributes 对象的地址。 第二次绘制图像 (设置默认矩阵) 调用后,所有颜色的红色分量增加 50%,所有灰色的绿色分量增加 50%。 第三次在设置笔矩阵) 调用后 (绘制图像时,由笔绘制的所有颜色的蓝色分量增加 50%,由笔绘制的所有灰色的红色、绿色和蓝色分量增加了 50%。 第四次在调用 ImageAttributes::ClearColorMatrices) 后 (绘制图像时,不会对笔绘制的颜色和灰色应用任何调整。


VOID Example_SetClearColorMatrices(HDC hdc)
{
   Graphics graphics(hdc);

   Image            image(L"TestMetafile6.emf");
   ImageAttributes  imAtt;
   RectF            rect;
   Unit             unit;

   image.GetBounds(&rect, &unit);

   ColorMatrix defaultColorMatrix = {  // Multiply red component by 1.5.
      1.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,  0.0f,  0.0f,
      0.0f,  0.0f,  0.0f,  1.0f,  0.0f,
      0.0f,  0.0f,  0.0f,  0.0f,  1.0f};

   ColorMatrix defaultGrayMatrix = {  // Multiply green component by 1.5.
      1.0f,  0.0f,  0.0f,  0.0f,  0.0f,
      0.0f,  1.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,  0.0f,
      0.0f,  0.0f,  0.0f,  0.0f,  1.0f};

   ColorMatrix penColorMatrix = {     // Multiply blue component by 1.5.
      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.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};

   ColorMatrix penGrayMatrix = {      // Multiply all components by 1.5.
      1.5f,  0.0f,  0.0f,  0.0f,  0.0f,
      0.0f,  1.5f,  0.0f,  0.0f,  0.0f,
      0.0f,  0.0f,  1.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};

   // Set the default color- and grayscale-adjustment matrices.
   imAtt.SetColorMatrices(
      &defaultColorMatrix,
      &defaultGrayMatrix, 
      ColorMatrixFlagsAltGray,
      ColorAdjustTypeDefault); 

   graphics.DrawImage(&image, 10.0f, 10.0f, rect.Width, rect.Height);

   graphics.DrawImage(
      &image, 
      RectF(10.0f, 50.0f, rect.Width, rect.Height),  // destination rectangle 
      rect.X, rect.Y,                // upper-left corner of source rectangle 
      rect.Width,                    // width of source rectangle
      rect.Height,                   // height of source rectangle
      UnitPixel,
      &imAtt);

   // Set the pen color- and grayscale-adjustment matrices.
   imAtt.SetColorMatrices(
      &penColorMatrix,
      &penGrayMatrix, 
      ColorMatrixFlagsAltGray,
      ColorAdjustTypePen); 

   graphics.DrawImage(
      &image, 
      RectF(10.0f, 90.0f, rect.Width, rect.Height),  // destination rectangle 
      rect.X, rect.Y,                // upper-left corner of source rectangle 
      rect.Width,                    // width of source rectangle
      rect.Height,                   // height of source rectangle
      UnitPixel,
      &imAtt);

   imAtt.ClearColorMatrices(ColorAdjustTypePen);

   graphics.DrawImage(
      &image, 
      RectF(10.0f, 130.0f, rect.Width, rect.Height),  // destination rectangle 
      rect.X, rect.Y,                // upper-left corner of source rectangle 
      rect.Width,                    // width of source rectangle
      rect.Height,                   // height of source rectangle
      UnitPixel,
      &imAtt); 
}
				

下图显示了上述代码的输出。

显示四行四个省略号的插图:使用笔绘制的颜色差异大于填充颜色

要求

   
最低受支持的客户端 Windows XP、Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 gdiplusimageattributes.h (包括 Gdiplus.h)
Library Gdiplus.lib
DLL Gdiplus.dll

另请参阅

Bitmap

颜色

ColorAdjustType

ColorMatrix

图像

ImageAttributes

ImageAttributes::ClearColorMatrix

ImageAttributes::SetColorMatrices

ImageAttributes::SetColorMatrix

ImageAttributes::SetToIdentity

Metafile

重新着色