我在UWP应用程序中使用了一些Win2D效果和Composition 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
替换DirectionalBlurEffect
效果,我在调用CreateEffectFactory
方法时会出现异常,说不支持输入效果。
现在,我looked at the documentation似乎这两种效果都有[NoComposition]
归因,所以我的第一个问题是:
如果两个效果都不受支持(
[NoComposition]
属性),为什么GaussianBlurEffect
工作正常且DirectionalBlurEffect
没有?
我的第二个问题是:
有没有其他方法可以使用/应用
DirectionalBlurEffect
?有很多Win2D效果被标记为[NoComposition]
我想使用,是否有解决方法,或者我只是不得不放弃它们?
感谢您的帮助!