2016-12-31 84 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格式顯示。 –