在UWP中保存图像然后在WinForms中加载

时间:2017-11-14 12:09:54

标签: c# image uwp inkcanvas

早上好StackOverflow,

今天我来找你的一个场景让我慢慢疯了。我希望你可以帮助我,因为我确信这一定是可能的,但我不能自己解决。

我的问题是我目前正在研究两种不同的应用程序。第一个是UWP应用程序,用于为内部邮件系统提供包。这里的想法是,收到包后,该人将使用InkCanvas签名对应用程序进行签名。然后应该将其作为字节数组保存到数据库中,然后在WinForm或WebForm应用程序(我目前正在首先使用WinForm)中重新加载为常规旧图像文件。但是,我绝对坚持在从UWP获得的WriteableBitmap和我需要在WinForms中加载的常规Bitmap之间进行转换。有什么想法吗?

这就是我现在正在做的事情:

保存UWP图像:

https://www.example.com/test?limit=60
https://www.example.com/test?limit=45
https://www.example.com/test?limit=all

然后我将字节保存到数据库,并从WinForms应用程序中的数据库中提取它们......所以我在这里犯了一些愚蠢的错误?我是否以错误的格式阅读签名?或者我是否需要做更多的事情才能将格式从一种格式转换为另一种格式?

我很困难,在尝试了StackOverflow页面的许多不同结果后,我不知道我做错了什么。

任何帮助都会很棒!对不起,如果我做了一些愚蠢的事情。

1 个答案:

答案 0 :(得分:1)

您实际上是将原始位图数据保存到数据库中。 我不太清楚Winform导入器是如何工作的,但我怀疑它可以导入原始位图数据。

您应首先将原始数据编码为PNG或JPEG图像并保存结果。您将以常规的图像文件结束,该文件应该可以从Winform中读取。

using (IRandomAccessStream stream = /* the stream where you want to save the data */)
{
    byte[] bytes = renderTarget.GetPixelBytes();                

    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
    encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                                 BitmapAlphaMode.Ignore,
                                 (uint)canvas.Width, (uint)canvas.Height,
                                 96, 96, bytes);

    await encoder.FlushAsync();
}