renderbitmap访问冲突

时间:2017-09-04 16:55:04

标签: c# bitmap uwp access-violation

我目前正在开发一个带签名的UWP应用程序,并将其转换为base64以便在线使用。奇怪的是,它有时会起作用,但有些则不会,并且会出现访问冲突错误

代码行是

await renderBitmap.RenderAsync(canvas);

这是放在一个调度程序中,以便它可以访问UI线程并取得了一些成功,但并非总是如此。我用它来转换图像的代码是:

await Dispatcher.RunTaskAsync(async () =>
{
    try
    {
        var renderBitmap = new RenderTargetBitmap();
        Debug.WriteLine("rendering bitmap");
        await renderBitmap.RenderAsync(canvas);
        Debug.WriteLine("rendered bitmap");

        var bitmap = renderBitmap;
        var img = (await bitmap.GetPixelsAsync()).ToArray();
        Debug.WriteLine("stage 1 passed - bitmap render");
        var encoded = new InMemoryRandomAccessStream();
        var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, encoded);
        encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight,
                      (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, img);
        Debug.WriteLine("stage 1 passed - created encoder");
        await encoder.FlushAsync();
        encoded.Seek(0);
        var bytes = new byte[encoded.Size];
        await encoded.AsStream().ReadAsync(bytes, 0, bytes.Length);
        retVal = Convert.ToBase64String(bytes);
    }
    catch (Exception e)
    {
        Debug.WriteLine("Crashed when getting signature. Error Message Below" + Environment.NewLine + e.InnerException.ToString());
    }
}

希望有人可以帮我解决这个问题,因为调试器在这一行崩溃了。

谢谢!

0 个答案:

没有答案