编辑:关闭这个因为我找到了它错误的原因,但不是删除这篇文章..我生成一个更精确的问题的新帖子。
嗨大家好,
我已经阅读了一些二进制数据。我希望将其转换为System.Drawing.Image
,因此我创建一个Image object
的实例,使用memory 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);
}
这是尝试反序列化图像的代码,它抛出异常(this is a seperate image of the exception)
alt text http://img254.imageshack.us/img254/9748/step1zx3wk5.png
是否存在未正确处理掉或无法序列化的内容..因此抛出异常?
请帮助:)
编辑:在我的 Image Debugger Visualizer 中调用异常。
我上传了完整的VS2008解决方案here(1.28MB下载)。
这是两个项目 - > 可视化工具类和 MS测试类。如果你运行唯一的单元测试,它将抛出通用(读取:无用)GDI +异常,因为它无法反序列化通过线路传递给调试器的Image实例。如果您传递了一个使用文件路径构造函数创建的Image实例,则反序列化可以完美地运行。
编辑2:使用了不同的文件上传网站 - 干杯!
编辑3:如何实际重现错误。
编辑4:这是异常的两个SCREEN SHOTS(如果你不想下载解决方案文件)。
答案 0 :(得分:3)
我怀疑在您的真实代码中,您正在写入MemoryStream
而不是将其倒回;如果是这种情况,请在尝试重新加载之前将Position设置为0.
答案 1 :(得分:2)
刚刚测试了你的代码,它运行良好,代码很好。图像文件或路径一定存在问题。 这是我的考验:
private void Form1_Load(object sender, EventArgs e)
{
byte[] data = File.ReadAllBytes("c:\\t.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?
originalBinaryDataStream.Seek(0, SeekOrigin.End);
pictureBox1.Image= new Bitmap(originalBinaryDataStream);
}
}
我在PictureBox中看到了图像。
答案 2 :(得分:0)
我更新了初始问题帖子,其中包含整个VS解决方案的链接(这是一个班级和一个单元测试)。单元测试会抛出失败失败失败异常。请检查一下。