位图效果概述

使用位图效果,设计人员和开发人员可以将可视化效果应用到已呈现的 Windows Presentation Foundation (WPF) 内容。 例如,使用位图效果,您可以轻松地将 DropShadowBitmapEffect 效果或模糊效果应用到图像或按钮。

重要说明重要事项

在 .NET Framework 4 或更高版本,BitmapEffect 类已过时。如果尝试使用 BitmapEffect 类,将会得到过时异常。BitmapEffect 类的非过时替代项为 Effect 类。在大多数情况下,Effect 类速度快得多。

本主题包括下列各节。

  • WPF 位图效果
  • 如何应用效果
  • 创建自定义效果
  • 相关主题

WPF 位图效果

位图效果(BitmapEffect 对象)是简单的像素处理操作。 位图效果将 BitmapSource 作为输入并在应用效果(如模糊或投影)之后生成新的 BitmapSource。 每个位图效果都公开了控制筛选属性的属性,如 BlurBitmapEffectRadius

在 WPF 中,可以将效果设置为活动 Visual 对象的属性,如 ButtonTextBox,这是一种特殊情况。 像素处理在运行时应用和呈现。 在这种情况下,呈现时 Visual 将自动转换为其等效 BitmapSource,并作为输入提供给 BitmapEffect。 输出替换 Visual 对象的默认呈现行为。 这就是 BitmapEffect 对象强制仅以软件方式呈现 Visual 对象, (即应用效果时不对 Visual 对象进行硬件加速)的原因。

注意注意

WPF 位图效果以软件模式呈现。应用效果的任何对象都将在软件中呈现。将位图效果应用于大型 Visual 类或对位图效果的属性进行动画处理时,将最大程度地降低性能。这并不表示您不能按照这种方式使用位图效果,而是指使用时应谨慎并进行充分的测试,以保证您的用户获得的体验和您预期的一样。

注意注意

WPF 位图效果不支持部分信任执行。若要使用位图效果,应用程序必须具有完全信任权限。

如何应用效果

BitmapEffectVisual 的一个属性。 因此,将效果应用于诸如 ButtonImageDrawingVisualUIElement 等 Visual 对象就如同设置属性一样简单。 可以将 BitmapEffect 设置为单个 BitmapEffect 对象,或可以通过使用 BitmapEffectGroup 对象将多个效果链接在一起。。

下面的示例演示如何在Extensible Application Markup Language (XAML) 中应用 BitmapEffect

<Button  Width="200">You Can't Read This!
  <Button.BitmapEffect>

  <!-- <BitmapEffectGroup> would go here if you wanted to apply more 
         then one effect to the Button. However, in this example only  
         one effect is being applied so BitmapEffectGroup does not need  
         to be included. -->

    <!-- The larger the Radius, the more blurring. The default range is 20.
         In addition, the KernelType is set to a box kernel. A box kernel
         creates less disruption (less blur) then the default Gaussian kernel. -->
    <BlurBitmapEffect Radius="10" KernelType="Box" />

  </Button.BitmapEffect>
</Button>

下面的示例演示如何在代码中应用 BitmapEffect

// Get a reference to the Button.
Button myButton = (Button)sender;

// Initialize a new BlurBitmapEffect that will be applied
// to the Button.
BlurBitmapEffect myBlurEffect = new BlurBitmapEffect();

// Set the Radius property of the blur. This determines how 
// blurry the effect will be. The larger the radius, the more
// blurring. 
myBlurEffect.Radius = 10;

// Set the KernelType property of the blur. A KernalType of "Box"
// creates less blur than the Gaussian kernal type.
myBlurEffect.KernelType = KernelType.Box;

// Apply the bitmap effect to the Button.
myButton.BitmapEffect = myBlurEffect;
注意注意

BitmapEffect 应用到某个布局容器(如 DockPanelCanvas)时,该效果将被应用到该元素或 Visual 类及其所有子元素的可视化树中。

创建自定义效果

WPF 还提供了非托管接口,用于创建可在托管的 WPF 应用程序中使用的自定义效果。 有关创建自定义位图效果的其他参考资料,请参见非托管 WPF 位图效果文档。

请参见

参考

BitmapEffectGroup

BitmapEffectInput

BitmapEffectCollection

Unmanaged WPF Bitmap Effect

概念

图像处理概述

安全性 (WPF)

WPF 图形呈现疑难解答

优化性能:二维图形和图像处理