某些 Win2D 效果不适用于 Composition API(不受支持?)
Some Win2D effects not working with Composition APIs (unsupported?)
我在 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;
}
现在,它工作得很好,但是如果我尝试用 DirectionalBlurEffect
替换 GaussianBlurEffect
效果,我在调用 CreateEffectFactory
方法时会遇到异常,说不支持输入效果
现在,我 looked at the documentation 似乎这两种效果都具有 [NoComposition]
属性,所以我的第一个问题是:
If both of the effects are unsupported ([NoComposition]
attribute), why is it that the GaussianBlurEffect
works fine and the DirectionalBlurEffect
doesn't?
我的第二个问题是:
Is there another way to use/apply that DirectionalBlurEffect
? There are quite a few Win2D effects that are marked as [NoComposition]
that I would like to use, is there a workaround for that or do I just have to give up on them?
感谢您的帮助!
Win2D 文档似乎没有更新,目前仅支持GaussianBlurEffect
(参见here)
我在 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;
}
现在,它工作得很好,但是如果我尝试用 DirectionalBlurEffect
替换 GaussianBlurEffect
效果,我在调用 CreateEffectFactory
方法时会遇到异常,说不支持输入效果
现在,我 looked at the documentation 似乎这两种效果都具有 [NoComposition]
属性,所以我的第一个问题是:
If both of the effects are unsupported (
[NoComposition]
attribute), why is it that theGaussianBlurEffect
works fine and theDirectionalBlurEffect
doesn't?
我的第二个问题是:
Is there another way to use/apply that
DirectionalBlurEffect
? There are quite a few Win2D effects that are marked as[NoComposition]
that I would like to use, is there a workaround for that or do I just have to give up on them?
感谢您的帮助!
Win2D 文档似乎没有更新,目前仅支持GaussianBlurEffect
(参见here)