某些 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