编辑:关闭这个是因为我找到了它出错的原因,但是我没有删除这个帖子..我生成了一个更新的帖子,里面有一个更精致的问题。
嗨伙计,
我有一些我读入的二进制数据。我希望将其转换为System.Drawing.Image
,所以我创建了一个 的实例Image object
,使用 amemory stream
作为输入数据。
在我完成之后,我序列化然后反序列化图像(对于一些业务逻辑)。反序列化会引发异常。如果我Image
使用文件名构造函数而不是内存流构造函数创建实例,则一切都可以 100% 工作。这表明Image
对象可以通过网络进行序列化。
我做错了什么memory stream
,我用过?
这是我用来制作 Image 对象的代码,在它被序列化之前:-
// Fake way of getting some binary (image) data.
byte[] data = File.ReadAllBytes("Chick.jpg");
using (Stream originalBinaryDataStream = new MemoryStream(data))
{
// This works perfectly fine, if use this method (which i can't).
//image = new Bitmap("Chick.jpg");
// This throws an exception when it's deserialized.
// It doesn't like the memory stream reference?
image = new Bitmap(originalBinaryDataStream);
}
这是尝试反序列化图像的代码,它会引发异常(这是异常的单独图像)
替代文字 http://img254.imageshack.us/img254/9748/step1zx3wk5.png
是否有一些东西没有正确处理或无法序列化..因此抛出异常?
请帮忙 :)
编辑:在我的Image Debugger Visualizer中调用了异常。
我在这里上传了完整的 VS2008 解决方案(1.28MB 下载)。
其中有两个项目->可视化器类和MS 测试类。如果您运行唯一的单元测试,它将抛出通用(读取:无用)GDI + 异常,因为它无法反序列化通过线路传递到调试器即的 Image 实例。如果您将使用文件路径构造函数创建的 Image 实例传递给它,则反序列化将完美运行。
编辑 2:使用了不同的文件上传网站 - 干杯!
编辑 3:如何实际重现错误。
- 将项目更改为调试模式(不是发布模式)
- 删除所有断点。
- 打开 ImageDebuggerVisualizer.cs
- 在第 22 行添加断点。
- 现在调试UnitTest1 单元测试方法。将显示一个图像..关闭那个窗口..然后突然你将处于断点。跨过那个,砰!!!!碰撞!!砰。
编辑 4:这是异常的两个屏幕截图(如果您不想下载解决方案文件)。