某些Win2D效果无法使用Composition API(不支持?)

时间:2017-05-23 11:39:10

标签: c# xaml uwp windows-10 win2d

我在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]我想使用,是否有解决方法,或者我只是不得不放弃它们?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

看起来Win2D文档没有更新,现在只支持List(monadY, monadX, ....).sequenceU (参见here