Я пытался сериализовать и десериализовать BitmapImages. Я использую методы, которые предположительно работают, которые я нашел в этой теме: ошибка в преобразовании моего байта [] в WPF BitmapImage?
Просто чтобы повторить то, что происходит, вот часть моего кода сериализации:
using (MemoryStream ms = new MemoryStream())
{
// This is a BitmapImage fetched from a dictionary.
BitmapImage image = kvp.Value;
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(image));
encoder.Save(ms);
byte[] buffer = ms.GetBuffer();
// Here I'm adding the byte[] array to SerializationInfo
info.AddValue((int)kvp.Key + "", buffer);
}
А вот код десериализации:
// While iterating over SerializationInfo in the deserialization
// constructor I pull the byte[] array out of an
// SerializationEntry
using (MemoryStream ms = new MemoryStream(entry.Value as byte[]))
{
ms.Position = 0;
BitmapImage image = new BitmapImage();
image.BeginInit();
image.StreamSource = ms;
image.EndInit();
// Adding the timeframe-key and image back into the dictionary
CapturedTrades.Add(timeframe, image);
}
Кроме того, я не уверен, имеет ли это значение, но ранее, когда я заполнял свой словарь, я кодировал растровые изображения с помощью PngBitmapEncoder, чтобы получить их в BitmapImages. Поэтому не уверен, что двойное кодирование как-то связано с этим. Вот метод, который делает это:
// Just to clarify this is done before the BitmapImages are added to the
// dictionary that they are stored in above.
private BitmapImage BitmapConverter(Bitmap image)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
BitmapImage bImg = new BitmapImage();
bImg.BeginInit();
bImg.StreamSource = new MemoryStream(ms.ToArray());
bImg.EndInit();
ms.Close();
return bImg;
}
}
Так что проблема в том, что сериализация и десериализация работает нормально. Нет ошибок, и в словаре есть записи с тем, что кажется BitmapImages, однако их ширина / высота и
некоторые другие свойства устанавливаются в «0», когда я смотрю на них в режиме отладки. И, конечно, при попытке отобразить изображения ничего не отображается.
Так есть какие-нибудь идеи относительно того, почему они не десериализованы должным образом?
Спасибо!