2016-12-31 69 views
-1

您好,我们在wpf页面上使用InkCanvas控件。我们正在数据库中保存Base64String字符串。见代码从墨水池底座64中获取错误字符串

private void submitButtonsCommand_Event(object sender) 
    { 
     byte[] sigByte; 
     InkCanvas icSignature = sender as InkCanvas; 
     using (var memoryStream = new MemoryStream()) 
     { 
      icSignature.Strokes.Save(memoryStream); 
      sigByte = memoryStream.ToArray(); 
     } 
     ServiceCallReportSignatureModel.SigCustomerSignature = Convert.ToBase64String(sigByte); 
     UpdateRecord(); 
    } 

当我们从数据库中检索数据并转换成FromBase64String后,当我们创建图像,然后我们得到的错误。

public Image LoadImage(base64string) 
{ 
    //data:image/gif;base64, 
    //this image is a single pixel (black) 
    byte[] bytes = Convert.FromBase64String(base64string); 

    Image image; 
    using (MemoryStream ms = new MemoryStream(bytes)) 
    { 
     image = Image.FromStream(ms); 
    } 

    return image; 
} 

我不知道为什么会发生这种情况。请帮我找出错误。 我们的base64字符串是: “AIwBAwxIEEWfARsCAAb/RjURAACAPx8JEQAAAAAAAPA/Cmwsh/EgR4kP + ETW/ojDWG7NZ8OZQxBN5otEzmU1mk04I7DnATcLHomzzUbxw/h3Dtp16yhlTQ2UsoTQh + uE64XgjsN6Js2UZpAZmFpmaZTKzzKZ4ctFmw3Mlmm0Bw9h/DtpTPKu79CYgm + VJqA =”

其实我们从墨迹画布控制采取的签名,我们要显示在当我们需要的时候。所以我们希望从基础数据64中创建图像,但是我们正在收到错误信息。

+0

你会得到什么错误/异常? –

+0

我们正在收到数据不匹配的错误。 –

+0

显然这是行不通的。当您以[* Ink Serialized Format *](https://msdn.microsoft.com/en-us/library/ms590544(v = vs.110).aspx)存储StrokeCollection时,您正尝试读取位图。这是两件完全不同的事情。 – Clemens

回答

2

StrokeCollection.Save(Stream)方法不保存位图。相反,

Save方法将StrokeCollection保存为墨迹序列化格式(ISF)。

您可以通过将Stream和保存的数据传递给StrokeCollection(Stream)构造函数来恢复保存的StrokeCollection。

+0

我可以从FileStream数据创建图像吗?以及如何在数据库中保存FileStream数据?我们是否需要生成基本64字符串的FileStream数据?我们不想在捕获签名时创建图像。我们希望在需要时创建图像。这是可能的和如何? –

+0

实际上,我们正在从墨水画布控制中取得签名,并且在我们需要时希望以pdf格式显示。 –