我有一个我正在尝试序列化的valuetype对象(通过BinaryFormatter)但是在这个对象中有3个Bitmaps,当序列化对象抛出“一般gdi +异常”时(不严重,这是例外) )。
这些位图必须序列化到文件中(而不是仅存储它们的相对位置并将图像与序列化对象的其余部分一起传输)。
该对象看起来很像:
[Serializable]
public struct MyObject
{
public String whatever;
// ...
public Bitmap img1;
public Bitmap img2;
}
我将它序列化为:
BinaryFormatter bFormatter = new BinaryFormatter();
fs = new FileStream(m_ContractFolder + filename + ".xtn", FileMode.OpenOrCreate);
bFormatter.Serialize(fs, contract);
我已经用Google搜索了,我发现的大部分内容都是xmlserialization(在这种情况下并不理想)。我不知道还能做什么。
答案 0 :(得分:0)
我在克隆和缩略图片时遇到过类似的东西。不幸的是,这已经有几年了,我不记得细节,但它与文件句柄有关,GDI将它们作为该Image对象的源代码。
我通过从MemoryStream加载图像而不是实际的源流来解决了这个问题。如果您的图像在文件中,请先将文件内容加载到MemoryStream中。然后从MemoryStream中加载图像。