gpt4 book ai didi

windows-phone - BitmapEncoder FlushAsync() 从不返回

转载 作者:行者123 更新时间:2023-12-04 06:00:34 26 4
gpt4 key购买 nike

我已经在网上搜索了这个,但还没有找到解决方案。我的通用手机应用程序中有一个 DispatchTimer。在每个刻度上,我想捕获屏幕的一部分并将其保存为 JPEG。我的代码看起来非常简单,并且没有崩溃——它根本就不会从 FlushAsync() 返回。看来一定是死锁场景了,但是我还没有找到冲突在哪里:

using (var ms = new MemoryStream())
{
var renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(ctrl);
var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();

using (var ras = ms.AsRandomAccessStream())
{
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, ras, propertySet);

encoder.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Premultiplied,
(uint) renderTargetBitmap.PixelWidth,
(uint) renderTargetBitmap.PixelHeight,
logicalDpi, logicalDpi,
pixelBuffer.ToArray());

await encoder.FlushAsync();
}

return ms.ToArray();
}

任何帮助都会很棒!我已经在这工作了几个小时,尝试不同的方法让它在没有运气的情况下工作。

最佳答案

我想到了!原来你不能只使用 MemoryStream.AsRandomAccessStream() 作为你的编码器目的地。原来你应该只使用 InMemoryRandomAccessStream,然后获取字节:

byte[] bytes = new byte[ras.Size];
await ras.AsStream().ReadAsync(bytes, 0, bytes.Length);
return bytes;

不知道为什么 MemoryStream 会导致它的问题,但这是一个非常简单的解决方法!我希望这对其他人有帮助。

关于windows-phone - BitmapEncoder FlushAsync() 从不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33905460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com