Размытие композиции Windows UWP на самом деле не размывает изображение

Я работаю над приложением UWP, которое использует Windows Composition API.

Существует элемент управления изображением с именем splitViewSideBarBlur. В качестве источника этого изображения задано растровое изображение другого элемента XAML с использованием следующего метода расширения:

public static async Task<IRandomAccessStream> RenderToRandomAccessStream(this UIElement element)
{
    if (element == null) throw new NullReferenceException();

    var rtb = new RenderTargetBitmap();
    await rtb.RenderAsync(element);

    var pixelBuffer = await rtb.GetPixelsAsync();
    var pixels = pixelBuffer.ToArray();

    var displayInformation = DisplayInformation.GetForCurrentView();

    var stream = new InMemoryRandomAccessStream();
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    encoder.SetPixelData(BitmapPixelFormat.Bgra8,
        BitmapAlphaMode.Premultiplied,
        (uint)rtb.PixelWidth,
        (uint)rtb.PixelHeight,
        displayInformation.RawDpiX,
        displayInformation.RawDpiY,
        pixels);

    await encoder.FlushAsync();
    stream.Seek(0);

   return stream;
}

Я использую эту функцию расширения, чтобы получить изображение определенного элемента XAML и сохранить его в переменной BitmapImage с именем splitViewBlurImage. Это растровое изображение устанавливается в качестве фона элемента SplitView. Затем я применяю GaussianBlur и пытаюсь вернуть новое размытое изображение в SplitView. Однако новое изображение отказывается быть размытым. Ниже приведен код для этого:

var image = new BitmapImage();

using (var stream = await element.RenderToRandomAccessStream())
{
    image.SetSource(stream);
}

ImageBrush ib = new ImageBrush();
ib.ImageSource = splitViewBlurImage;
ib.Stretch = Stretch.UniformToFill;
splitViewSideBarBlur.Source = splitViewBlurImage;
splitViewSideBarBlur.VerticalAlignment = VerticalAlignment.Top;

var graphicsEffect = new BlendEffect
{
    Background = new ColorSourceEffect()
    {
        Name = "Tint",
        Color = Color.FromArgb(95, 255, 255, 255)
    },
    Foreground = new GaussianBlurEffect()
    {
        Name = "Blur",
        Source = new CompositionEffectSourceParameter("Backdrop"),
        BlurAmount = (float)20,
        BorderMode = EffectBorderMode.Hard,
    }
};

var blurEffectFactory = _compositor.CreateEffectFactory(graphicsEffect,
            new[] { "Blur.BlurAmount", "Tint.Color" });
_brush = blurEffectFactory.CreateBrush();
var destinationBrush = _compositor.CreateBackdropBrush();
_brush.SetSourceParameter("Backdrop", destinationBrush);

var blurSprite = _compositor.CreateSpriteVisual();
blurSprite.Size = new Vector2((float)splitViewSideBarBlur.ActualWidth, (float)splitViewSideBarBlur.ActualHeight);
blurSprite.Brush = _brush;

this.splitViewSideBarBlur.Source = null;
ElementCompositionPreview.SetElementChildVisual(this.splitViewSideBarBlur, blurSprite);

Что я здесь делаю неправильно? Фоновое изображение выглядит хорошо, оно имеет черный оттенок, но изображение совсем не размыто.


person DemCodeLines    schedule 23.05.2016    source источник
comment
Вы использовали Lumia Imaging SDK 3.0?   -  person Grace Feng    schedule 24.05.2016
comment
Привет, @DemCodeLines, на какой версии Windows 10 ты пытаешься это запустить? В более ранних сборках Insider была известная проблема с размытием, но теперь она должна быть решена. Посетите эту страницу, чтобы узнать, какая последняя известная удачная конфигурация.   -  person robmikh    schedule 29.05.2016
comment
@GraceFeng-MSFT Мне пришлось удалить весь этот код и использовать Lumia Imaging SDK 3.0, поскольку новые API-интерфейсы Composition недоступны в сборке 10586 (текущий общий выпуск), а это означает, что только инсайдеры смогут запускать мое приложение.   -  person DemCodeLines    schedule 29.05.2016
comment
@robmikh Привет, в конце концов я зашел на страницу GitHub WindowsUIDevLabs и использовал настраиваемый элемент управления фоном, который там продемонстрирован. Работало отлично, пока я не понял, что это будет работать только на сборках Anniversary Update, которые на данный момент есть только у инсайдеров. Поэтому я пока перешел на Lumia Imaging SDK 3.0, но с нетерпением жду возможности вернуться к Composition, когда обновление станет доступным для всех.   -  person DemCodeLines    schedule 29.05.2016
comment
Возможный дубликат размывания фона приложения UWP в реальном времени с использованием DX Compositor   -  person iam.Carrot    schedule 07.10.2016