Ari*_*ulp 6 windows-phone win-universal-app
我已经在网上搜索了这个并没有找到解决方案.我的通用手机应用程序中有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();
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒!我已经在这几个小时了,尝试不同的方法让它没有运气.
Ari*_*ulp 12
我想到了!事实证明,您不能仅使用MemoryStream.AsRandomAccessStream()作为编码器目的地.事实证明你应该只使用InMemoryRandomAccessStream,然后获取字节:
byte[] bytes = new byte[ras.Size];
await ras.AsStream().ReadAsync(bytes, 0, bytes.Length);
return bytes;
Run Code Online (Sandbox Code Playgroud)
不确定为什么MemoryStream导致了它的问题,但这是一个非常简单的修复!我希望这有助于其他人.
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |