我正在使用 UWP 应用程序中的一些 Win2D 效果和合成 API,并且我遇到了一些可用效果的问题。
这是我用来模糊目标元素后面的一些内容的工作方法:
public static SpriteVisual GetAttachedBlur<T>(
[NotNull] this T element, float blur, int ms) where T : FrameworkElement
{
// Get the visual and the compositor
Visual visual = element.GetVisual();
Compositor compositor = visual.Compositor;
// Create the blur effect and the effect factory
GaussianBlurEffect blurEffect = new GaussianBlurEffect
{
Name = "Blur",
BlurAmount = blur,
BorderMode = EffectBorderMode.Hard,
Optimization = EffectOptimization.Balanced,
Source = new CompositionEffectSourceParameter("source")
};
CompositionEffectFactory effectFactory = compositor.CreateEffectFactory(blurEffect);
// Setup the rest of the effect
CompositionEffectBrush effectBrush = effectFactory.CreateBrush();
effectBrush.SetSourceParameter("source", compositor.CreateBackdropBrush());
// Assign the effect to a brush and display it
SpriteVisual sprite = compositor.CreateSpriteVisual();
sprite.Brush = effectBrush;
sprite.Size = new Vector2((float)element.ActualWidth, (float)element.ActualHeight);
ElementCompositionPreview.SetElementChildVisual(element, sprite);
return sprite;
}
现在,它工作得非常好,但是如果我尝试GaussianBlurEffect
用例如 a 替换该效果,DirectionalBlurEffect
则在调用该方法时会出现异常CreateEffectFactory
,说不支持输入效果。
现在,我查看了文档,似乎这两种效果都有[NoComposition]
归属,所以我的第一个问题是:
如果这两种效果都不受支持(
[NoComposition]
属性),为什么GaussianBlurEffect
工作正常而DirectionalBlurEffect
不能呢?
我的第二个问题是:
还有另一种使用/应用的方法
DirectionalBlurEffect
吗?有很多 Win2D 效果被标记为[NoComposition]
我想使用的,是否有解决方法或者我必须放弃它们?
谢谢你的帮助!