【问题标题】:Saving Image In UWP Then Loading In WinForms在 UWP 中保存图像然后在 WinForms 中加载
【发布时间】:2017-11-14 12:09:54
【问题描述】:

早上好 StackOverflow,

我今天带着一个让我慢慢发疯的场景来找你。我希望你能帮助我解决这个问题,因为我确信这一定是可能的,但我自己无法解决。

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

这是我目前正在做的事情:

保存 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 页面尝试了许多不同的结果之后,我不知道自己做错了什么。

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

【问题讨论】:

    标签: c# image uwp inkcanvas


    【解决方案1】:

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

    您应该首先将原始数据编码为 PNG 或 JPEG 图像并保存结果。您将以一个常规的 old 图像文件结束,该文件应该可以从 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,但我还没有足够的代表来注册。
    猜你喜欢
    • 2016-09-17
    • 2011-07-19
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多