Из-за некоторых ограничений хранилища данных (noSQL) мне нужно хранить изображения в виде строк.
Как я могу сериализовать растровое изображение в строку и обратно.
Вот как я это делаю:
Uri testImageUri = new Uri("/DictionaryBasedVM;component/test.jpg", UriKind.Relative);
StreamResourceInfo sri = Application.GetResourceStream(testImageUri);
var stringData = GetString(sri.Stream);
ImageSource = stringData;
Где
ImageControl
- просто элемент управления изображением silverlight, определенный в xaml.
Я использую следующие служебные функции:
//For testing
public static string GetString(Stream stream)
{
byte[] byteArray = ReadFully(stream);
return Encoding.Unicode.GetString(byteArray,0,byteArray.Length);
}
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
И следующее свойство:
private string _ImageSource = "";
public string ImageSource
{
set
{
_ImageSource = value;
byte[] byteArray = Encoding.Unicode.GetBytes(value);
MemoryStream imageStream = new MemoryStream(byteArray);
BitmapImage imageSource = new BitmapImage();
imageSource.SetSource(imageStream);
ImageControl.Source = imageSource;
}
get
{
return _ImageSource;
}
}
Я получаю сообщение об ошибке: «Катастрофический сбой (Исключение из HRESULT: 0x8000FFFF (E_UNEXPECTED)))» как показано
![enter image description here](https://i.stack.imgur.com/dtN5M.png)
Даже если я не храню это как строку, мне все равно любопытно, почему я не могу этого сделать.