1

我需要渲染一个 xaml 元素并使用LumiaImageSDK 3

            var bitmapRended = new RenderTargetBitmap();
            await bitmapRended.RenderAsync(LayoutRoot);

            IBuffer buffer = await bitmapRended.GetPixelsAsync();

            var target = new WriteableBitmap(bitmapRended.PixelWidth, bitmapRended.PixelHeight);
            var source = new BufferImageSource(buffer);
            var blur = new BlurEffect(source, 128);

            var renderer = new WriteableBitmapRenderer(blur, target);

            var result = await renderer.RenderAsync();

            var imgBrush = new ImageBrush();
            imgBrush.ImageSource = result;

            Menu.Background = imgBrush;

但是当我运行代码时,我得到了这个错误:

The component cannot be found. (Exception from HRESULT: 0x88982F50)

at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

我认为这与我将其转换 RenderTargetBitmapIRandomAccessStream.

从这行代码引发了异常:var result = await renderer.RenderAsync();

似乎问题是一个僵局,但我无法找到解决方案

编辑:代码更新

4

2 回答 2

2

我在使用 Lumia Imaging SDK 时遇到了同样的问题。我仍在检查问题。但是,要模糊图像,使用Win2D是另一种选择。

上面的代码显示了如何将 XAML UIElement 呈现为 s 流或某物。然后您可以使用 Win2D 库对其进行模糊处理。我有帖子只是谈论如何做模糊的东西。

希望能帮助到你。

于 2015-10-16T05:40:27.110 回答
1

由于您有一个带有结果的 IBuffer(IBuffer 缓冲区),因此跳过所有缓冲区操作并创建一个 BufferImageSource。

var target = new WriteableBitmap(bitmapRender.PixelWidth, bitmapRender.PixelHeight);
using (var source = new BufferImageSource(buffer))
using (var blur = new BlurEffect(source , 128))
using (var renderer = new WriteableBitmapRenderer(blur, target))
{
    var result = await renderer.RenderAsync();
}

也就是说,我看不出你写的代码有明显的问题。我将不得不对其进行调查,但是在那之前,您确定流在开始吗?这是流的常见错误。

于 2015-10-16T12:20:31.600 回答