Webサイトから画像をダウンロードし、それらをbase-64文字列に変換してファイルにシリアル化し、逆シリアル化し、base-64文字列からSystem.Drawing.Imageに変換し、最後にSystem.Windows.Mediaに変換しようとしています。 .ImageSourceなので、UIにデータバインドできます。
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)
inConvert()
がヒットすると、このかなり役に立たない例外が発生します。
タイプ'System.Runtime.InteropServices.ExternalException'の例外がSystem.Drawing.dllで発生しましたが、ユーザーコードでは処理されませんでした
追加情報:GDI+で一般的なエラーが発生しました。
Properties.Resources.blank_image
ImageをImageSourceに変換することは正常に機能しますが、Base-64文字列をImageに変換することはできません。