繁体   English   中英

在 UWP 中将字节数组转换为 BitmapImage 时出错

[英]Error when convert byte array to BitmapImage in UWP

我想在捕获视图的屏幕截图时获得一个 BitmapImage。 所以我开始先获取字节数组数据,然后转换为BitmapImage。

RenderTargetBitmap renderTarget = new RenderTargetBitmap();
await renderTarget.RenderAsync(swapChainPanel);    
IBuffer pixelBuffer = await renderTarget.GetPixelsAsync();

await GetBitmapAsync(pixelBuffer.ToArray());
...
public static async Task<BitmapImage> GetBitmapAsync(byte[] data)
        {
            var bitmapImage = new BitmapImage();

            try
            {
                using (var stream = new InMemoryRandomAccessStream())
                {
                    using (var writer = new DataWriter(stream))
                    {
                        writer.WriteBytes(data);
                        await writer.StoreAsync();
                        await writer.FlushAsync();
                        writer.DetachStream();
                    }

                    stream.Seek(0);
                    await bitmapImage.SetSourceAsync(stream); // throw Exception
                }

                return bitmapImage;
            }
            catch (Exception e)
            {
                return null;
            }
        }

但它给出了错误:

找不到该组件。 (HRESULT 异常:0x88982F50)

请帮我找出问题所在。

在 UWP 中将字节数组转换为 BitmapImage 时出错

问题是您在转换时没有针对BitmapImage的特定BitmapEncoder 一般来说,我们经常使用下面的代码从字节中获取BitmapImage

_backAction = new Action<byte[]>(async (bytes) =>
{
    InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream();     
    BitmapImage img = new BitmapImage();
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    encoder.SetPixelData(
        BitmapPixelFormat.Bgra8,
        BitmapAlphaMode.Straight,
        (uint)48,
        (uint)32,
        DisplayInformation.GetForCurrentView().LogicalDpi,
        DisplayInformation.GetForCurrentView().LogicalDpi,
        bytes);
    await encoder.FlushAsync();
    await img.SetSourceAsync(stream);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM