gpt4 book ai didi

WPF 位图图像序列化/反序列化

转载 作者:行者123 更新时间:2023-12-04 21:43:27 24 4
gpt4 key购买 nike

我一直在尝试序列化和反序列化 BitmapImages。我一直在使用我在这个线程中发现的应该有效的方法:error in my byte[] to WPF BitmapImage conversion?

只是为了迭代正在发生的事情,这是我的序列化代码的一部分:

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 对 Bitmaps 进行了编码,以将它们放入 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,但是它们的宽度/高度和
当我在 Debug模式下查看它们时,其他一些属性都设置为“0”。当然,当我尝试显示图像时,什么也没有显示。

那么关于为什么它们没有正确反序列化的任何想法?

谢谢!

最佳答案

1) 您不应该处置从图像初始化中使用的 MemoryStream。删除 using在这一行

using (MemoryStream ms = new MemoryStream(entry.Value as byte[]))

2) 之后
encoder.Save(ms);

尝试添加
ms.Seek(SeekOrigin.Begin, 0);
ms.ToArray();

关于WPF 位图图像序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4308777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com