ImageAttributes::ClearColorKey 方法 (gdiplusimageattributes.h)

ImageAttributes::ClearColorKey 方法清除指定类别 (透明度范围) 的颜色键。

语法

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

parameters

[in, optional] type

类型: ColorAdjustType

ColorAdjustType 枚举的元素,该元素指定清除颜色键的类别。 默认值为 ColorAdjustTypeDefault

返回值

类型: 状态

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

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

注解

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

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

为特定类别指定颜色或灰度调整设置后,默认调整设置将不再应用于该类别。 例如,假设你指定一个默认颜色键,该键使具有 200 到 255 的红色分量的任何颜色透明,并指定默认伽玛值 1.8。 如果通过调用 ImageAttributes::SetColorKey 设置笔类别的颜色键,则默认颜色键和默认伽玛值将不适用于笔。 如果以后通过调用 ImageAttributes::ClearColorKey 清除笔颜色键,则笔类别不会还原默认颜色键;而笔类别将没有颜色键。 同样,笔类别不会还原默认伽玛值;相反,笔类别将没有伽玛值。

示例

以下示例从 .emf 文件创建 Image 对象。 该代码还会创建 ImageAttributes 对象。 首次调用 ImageAttributes::SetColorKey 设置 ImageAttributes 对象的默认颜色键,以便红色分量从 80 到 120 的颜色是透明的。 第二次调用 ImageAttributes::SetColorKey 设置 ImageAttributes 对象的笔颜色键,以便具有红色分量(从 135 到 175)的所有颜色都是透明的。

代码调用 DrawImage 一次,无需颜色调整就绘制图像。 然后,代码再调用 DrawImage 三次,每次传递 Image 对象的地址和 ImageAttributes 对象的地址。 在设置默认颜色键) 调用后 (第二次绘制图像时,从 80 到 120 的所有红色都是透明的。 第三次在设置笔颜色键) 的调用后 (绘制图像时,使用笔绘制的 135 到 175 的所有红色都是透明的。 此外,所有未用笔绘制的 80 到 120 的红色都是透明的。 第四次在调用 ImageAttributes::ClearColorKey) 后 (绘制图像时,使用笔绘制的红色都不是透明的。 此外,所有未用笔绘制的 80 到 120 的红色都是透明的。


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

   Image image(L"TestMetafile5.emf");
   ImageAttributes imAtt;

   // Draw the image (metafile) using no color adjustment.
   graphics.DrawImage(
      &image,
      Rect(0, 0, image.GetWidth(), image.GetHeight()),  // dest rect
      0, 0, image.GetWidth(), image.GetHeight(),        // source rect
      UnitPixel);

   // Set the default color key.
   imAtt.SetColorKey(
      Color(0, 80, 0, 0),
      Color(255, 120, 255, 255),
      ColorAdjustTypeDefault);

   // Draw the image (metafile) using default color adjustment.
   // Colors with red components from 80 through 120 are transparent.
   graphics.DrawImage(
      &image,
      Rect(0, 100, image.GetWidth(), image.GetHeight()),  // dest rect
      0, 0, image.GetWidth(), image.GetHeight(),          // source rect
      UnitPixel,
      &imAtt);

   // Set the pen color key.
   imAtt.SetColorKey(
      Color(0, 135, 0, 0),
      Color(255, 175, 255, 255),
      ColorAdjustTypePen);

   // Draw the image (metafile) using default and pen adjustment.
   // Colors drawn with a pen that have red components from 135 through 175
   // are transparent. Colors not drawn with a pen that have red components
   // from 80 to 120 are transparent.
   graphics.DrawImage(
      &image,
      Rect(0, 200, image.GetWidth(), image.GetHeight()),  // dest rect
      0, 0, image.GetWidth(), image.GetHeight(),          // source rect
      UnitPixel,
      &imAtt);

   // Clear the pen color key.
   imAtt.ClearColorKey(ColorAdjustTypePen);

   // Draw the image (metafile) using only default color adjustment.
   // No colors drawn with a pen are transparent. Colors not drawn with 
   // a pen that have red components from 80 to 120 are transparent.
   graphics.DrawImage(
      &image,
      Rect(0, 300, image.GetWidth(), image.GetHeight()),  // dest rect
      0, 0, image.GetWidth(), image.GetHeight(),          // source rect
      UnitPixel,
      &imAtt); 
}
				

前面的代码以及特定文件 TestMetafile5.png 生成了以下输出。 左列中的条形图是用笔绘制的,右列中的条形图用画笔填充。 默认颜色键适用于用画笔填充的条形图。 应用于使用笔绘制的条形图的颜色键因 ImageAttributes::SetColorKeyImageAttributes::ClearColorKey 调用而异。

显示四行条形图,每行两列;最后两行的条数不相等

要求

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

另请参阅

Bitmap

颜色

ColorAdjustType

图像

ImageAttributes

ImageAttributes::ClearThreshold

ImageAttributes::SetColorKey

ImageAttributes::SetThreshold

Metafile

重新着色