我需要使用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()
我认为这与我将RenderTargetBitmap
转换为IRandomAccessStream
的方式有关。
从这行代码引出异常:var result = await renderer.RenderAsync();
它认为问题是僵局但我无法找到解决方案
编辑:代码已更新
答案 0 :(得分:2)
使用Lumia Imaging SDK时遇到了同样的问题。我还在检查这个问题。但是,要模糊图像,使用Win2D是另一种选择。
上面的代码显示了如何将XAML UIElement呈现为流或某事物。然后你可以使用Win2D库模糊它。我post只是谈论如何做模糊的东西。
希望它有所帮助。
答案 1 :(得分: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();
}
那说我无法看到您编写的代码存在明显问题。我将不得不调查它,但在那之前,你确定流是在开头吗?这是流的常见错误。