2013-01-24 23 views
0

我試圖將.jpg或.png文件轉換爲可寫入的位圖。我從另一個源獲取圖像並轉換爲base64編碼。刪除包裝後,我有一個寬度,高度和base64數據。然後我使用:image.jpg通過base64寫入bitablebitmap的字節數組WP8

var base64 = dataurl.Substring(dataurl.IndexOf("base64,") + 7); 
binData = Convert.FromBase64String(base64); 

這給了我的圖像的二進制數據。這個問題真的出現在我爲Windows Phone 8編寫這個程序,所以我限制了我可以使用的庫和方法。顯而易見的選擇是:

using (var stream = new MemoryStream(binData, 0, binDta.Length, true, true)) 
{ 
    var wbp = new WriteableBitmap(1,1).LoadJpeg(stream); 
} 

但我從WriteableBitmap庫中獲取System.ArgumentException。任何在Windows Phone 8上工作的想法?

回答

1

你應該確保base64解碼數據真的是一個有效的格式,如JPG和PNG。 然後我建議你嘗試WriteableBitmapEx FromStream方法:= canvas.toDataURL()

var wbp = new WriteableBitmap(1, 1).FromStream(stream); 
+0

基部64編碼來自一個JavaScript線'VAR數據;'我試圖從JPEG發送畫布數據, PNG和BMP圖像,但他們總是用image/jpg彈出另一面。我會認爲這是一個有效的格式,我試過.FromStream(流)。我仍然會考慮你的建議並停止嘗試使用.FromByteArray和.FromJpeg。還有什麼提示?如果有幫助,我可以從.png或.jpg文件中爲您提供binData或base64數據。 – rickstockham

+0

您應該只使用bin數據並將其保存爲jpeg/png文件,然後查看Windows是否可以打開它。只是爲了確保它是一個有效的文件格式。 –

+1

找出來了,你的答案都很接近。由於windows phone 8的'特殊'性質和字節數據的壓縮性質,'writeableBitmap.LoadJpeg(stream)'是'Deployment.Curretn.Dispatcher.BeginInvoke();'中的正確選擇,哦線程依賴的樂趣。我很確定,對於我認識的任何圖書館來說,這是不可能的。幸運的是我可以強制我的所有圖像都是JPG格式。 – rickstockham

相關問題