我試圖從網站下載圖像,將它們轉換爲base-64字符串,以便它們可以序列化爲文件,反序列化,從base-64字符串轉換到System.Drawing.Image,最後轉換爲System.Windows.Media.ImageSource,以便它們可以綁定到我的用戶界面。下載圖像,序列化爲base-64字符串,轉換爲ImageSource
public static string ImageToString(Image image)
{
using (var ms = new MemoryStream())
{
if (image == null)
image = Properties.Resources.blank_image;
image.Save(ms, image.RawFormat);
return Convert.ToBase64String(ms.ToArray());
}
}
public static Image StringToImage(string imageString)
{
if (String.IsNullOrEmpty(imageString))
return Properties.Resources.blank_image;
var array = Convert.FromBase64String(imageString);
using (var ms = new MemoryStream(array))
{
return Image.FromStream(ms);
}
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return null;
var image = (System.Drawing.Image)value;
var bitmap = new System.Windows.Media.Imaging.BitmapImage();
bitmap.BeginInit();
MemoryStream memoryStream = new MemoryStream();
image.Save(memoryStream, image.RawFormat);
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
bitmap.StreamSource = memoryStream;
bitmap.EndInit();
return bitmap;
}
我得到的時候image.Save(memoryStream, image.RawFormat)
在Convert()
被擊中這個相當無助的例外:
的類型 'System.Runtime.InteropServices.ExternalException' 的異常出現在 System.Drawing.dll程序但未在用戶代碼中處理
附加信息:GDI +中發生了一般性錯誤。
轉換我的Properties.Resources.blank_image
圖像ImageSource工作正常,但不是base-64字符串轉換爲圖像。
http://stackoverflow.com/questions/5813633/a-generic- error-occurrence-at-gdi-at-bitmap-save-after-using-savefiledialog – Nathan
另外,我很困惑,爲什麼你要序列化到一個字符串呢?將圖像直接保存爲二進制文件似乎很簡單。 – Nathan
我使用的是Protobuf-net,它不支持序列化圖像。 – Brett