C# 在UWP中保存图像,然后在WinForms中加载
早上好 今天我带着一个让我慢慢发疯的场景来到你们面前。我希望你能在这方面帮助我,因为我确信这一定是可能的,但我自己解决不了 我的问题是,我目前正在处理两个不同的应用程序。第一个是UWP应用程序,用于为内部邮件系统交付包。这里的想法是,在收到包后,该人员将使用InkCanvas签名对应用程序进行签名。然后,应将其作为字节数组保存到数据库中,然后作为常规旧图像文件重新加载到WinForm或WebForm应用程序中(我目前正在首先执行WinForm应用程序)。然而,我完全无法在从UWP获得的可写位图和需要在WinForms中加载的常规位图之间进行转换。有什么想法吗 以下是我目前正在做的事情: 保存UWP图像:C# 在UWP中保存图像,然后在WinForms中加载,c#,image,uwp,inkcanvas,C#,Image,Uwp,Inkcanvas,早上好 今天我带着一个让我慢慢发疯的场景来到你们面前。我希望你能在这方面帮助我,因为我确信这一定是可能的,但我自己解决不了 我的问题是,我目前正在处理两个不同的应用程序。第一个是UWP应用程序,用于为内部邮件系统交付包。这里的想法是,在收到包后,该人员将使用InkCanvas签名对应用程序进行签名。然后,应将其作为字节数组保存到数据库中,然后作为常规旧图像文件重新加载到WinForm或WebForm应用程序中(我目前正在首先执行WinForm应用程序)。然而,我完全无法在从UWP获得的可写位图和
private byte[] SaveImage()
{
var canvasStrokes = SignatureCanvas.InkPresenter.StrokeContainer.GetStrokes();
if (canvasStrokes.Count > 0)
{
var width = (int) SignatureCanvas.ActualWidth;
var height = (int) SignatureCanvas.ActualHeight;
var device = CanvasDevice.GetSharedDevice();
var renderTarget = new CanvasRenderTarget(device, width, height, 96);
using (var drawingSession = renderTarget.CreateDrawingSession())
{
drawingSession.Clear(Colors.White);
drawingSession.DrawInk(SignatureCanvas.InkPresenter.StrokeContainer.GetStrokes());
}
return renderTarget.GetPixelBytes();
}
return null;
}
然后我将字节保存到数据库中,并在WinForms应用程序中从数据库中提取它们。。。我是不是犯了个愚蠢的错误?我读的签名格式不对吗?或者我需要做更多的事情来将格式从一种转换为另一种
我被难住了,在尝试了StackOverflow页面的许多不同结果后,我不知道我做错了什么
任何帮助都将是惊人的!如果我做了傻事,我会感到抱歉 实际上您正在将原始位图数据保存到数据库中。 我不记得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();
}
谢谢,谢谢,谢谢!!你是我的英雄!我也会给你+1,但我还没有足够的代表来注册。