注意:这些功能(模糊和背景画笔)需要 Windows 10 周年更新。您目前可以通过 Windows Insider Program 获得 SDK 的预览
先决条件
- 针对 Windows 10 周年更新
- 基本了解可视层以及可视树的工作原理。你可以找到更多here。
此外,您可以查看我写的 here 的要点,这是在 XAML 应用程序中使用组合 API 快速启动和运行的方法。它也使用效果进行演示。不仅如此,它还包括使用 Composition API(使用我编写的包)加载图像。
开始
您可以通过两种方式在合成 API 中使用模糊效果。一种是适用于单个表面的法线效果。另一种是将其用作“背景”画笔,将其后面的所有内容进行模糊处理。
要使用模糊效果,您需要使用 Win2D 中的 GaussianBlurEffect 定义。是这样的:
GaussianBlurEffect blurEffect = new GaussianBlurEffect()
{
Name = "Blur",
BlurAmount = 0.0f, // You can place your blur amount here.
BorderMode = EffectBorderMode.Hard,
Optimization = EffectOptimization.Balanced,
Source = new CompositionEffectSourceParameter("source")
};
下一步是创建效果工厂:
var effectFactory = compositor.CreateEffectFactory(blurEffect, new[] {"Blur.BlurAmount"});
第二个参数不是必需的,但提供它允许您在编译效果后动画或更改命名属性。在这种情况下,我们现在可以更改 BlurAmount 或为其设置动画。如果您想重用模糊效果工厂来创建多个模糊效果画笔但让它们都使用不同的 BlurAmount,这将非常有用。
下一步取决于您希望效果如何工作。
单面
如果您希望它仅应用于单个表面,您可以执行以下操作:
var effectBrush = effectFactory.CreateBrush();
effectBrush.SetSourceParameter("source", someOtherSurfaceBrush);
visual.Brush = effectBrush;
背景
但是,如果您想动态模糊给定视觉对象背后的大量内容,您可以执行以下操作:
var effectBrush = effectFactory.CreateBrush();
effectBrush.SetSourceParameter("source", compositor.CreateBackdropBrush());
visual.Brush = effectBrush;
请注意,这看起来与第一种方法非常相似,但不是给它一个表面笔刷,而是给它一个 BackdropBrush。这将实时获取视觉背后的内容并将其馈送到您的效果源中。在这种情况下,视觉“背后”的任何东西都会变得模糊。
性能
如果您只对单个图像进行模糊处理,最好对单个表面进行模糊处理。您应该尝试仅在真正需要时才使用 BackdropBrush。
显示更多!
要查看更多信息,请访问我们的GitHub page!我们创建了一个自定义 XAML 控件,它可以帮助您解决问题here,您可以在here 中看到它的运行情况。您还可以看到 //build talk here。