Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在UWP中保存图像,然后在WinForms中加载_C#_Image_Uwp_Inkcanvas - Fatal编程技术网

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

C# 在UWP中保存图像,然后在WinForms中加载,c#,image,uwp,inkcanvas,C#,Image,Uwp,Inkcanvas,早上好 今天我带着一个让我慢慢发疯的场景来到你们面前。我希望你能在这方面帮助我,因为我确信这一定是可能的,但我自己解决不了 我的问题是,我目前正在处理两个不同的应用程序。第一个是UWP应用程序,用于为内部邮件系统交付包。这里的想法是,在收到包后,该人员将使用InkCanvas签名对应用程序进行签名。然后,应将其作为字节数组保存到数据库中,然后作为常规旧图像文件重新加载到WinForm或WebForm应用程序中(我目前正在首先执行WinForm应用程序)。然而,我完全无法在从UWP获得的可写位图和

早上好

今天我带着一个让我慢慢发疯的场景来到你们面前。我希望你能在这方面帮助我,因为我确信这一定是可能的,但我自己解决不了

我的问题是,我目前正在处理两个不同的应用程序。第一个是UWP应用程序,用于为内部邮件系统交付包。这里的想法是,在收到包后,该人员将使用InkCanvas签名对应用程序进行签名。然后,应将其作为字节数组保存到数据库中,然后作为常规旧图像文件重新加载到WinForm或WebForm应用程序中(我目前正在首先执行WinForm应用程序)。然而,我完全无法在从UWP获得的可写位图和需要在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页面的许多不同结果后,我不知道我做错了什么


任何帮助都将是惊人的!如果我做了傻事,我会感到抱歉

实际上您正在将原始位图数据保存到数据库中。 我不记得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,但我还没有足够的代表来注册。