2012-07-12 65 views
0

我试图将二进制数据转换为图像。这里是我的代码:C#图像溢出内存异常

Byte[] bytes = (byte[])(reader["Avatar"]); 
fs1.Write(bytes, 0, bytes.Length); 
pictureBox1.Image = Image.FromFile("image.jpg"); 
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
pictureBox1.Refresh(); 

但错误是出界线的内存异常: “pictureBox1.Image = Image.FromFile(” image.jpg文件 “);” 我不知道为什么会发生这种情况,请帮助我

+1

如何是前两行与其余的有关?如果'fs1'是针对'image.jpg'的某种形式的开放流,那么在调用'FromFile'之前可能需要关闭它,但是您没有显示足够的代码让我知道是否如此。 – 2012-07-12 07:36:21

+0

可能的重复[为什么我的表单在尝试加载图像时抛出OutOfMemory异常?](http://stackoverflow.com/questions/10769397/why-does-my-form-throw-an-outofmemory-exception-while - 操作 - 加载 - 图像) – 2012-07-12 07:44:51

回答

2

尝试用这种方法:

public Image ImageFromBytes(byte[] bytes) 
    { 
     using(var ms = new MemoryStream(bytes)) 
     { 
      return Image.FromStream(ms); 
     } 
    } 
+0

谢谢,这很好 – famfamfam 2012-07-12 07:53:12

2

如果fs1是一个流,您可能应该关闭它,然后再访问该文件的下一行。 请注意,您也可以在内存中创建映像并完全避免文件系统。

+0

对不起,我发布缺少代码: fs1.Close(); fs1 = null; – famfamfam 2012-07-12 07:39:43

0

您桅杆CloseDispose您的流:在using

fs1.Write(bytes, 0, bytes.Length); 
//Make sure you closed your stream 
fs1.Close(); 
// You should call Dispose too. 
fs1.Dispose(); 
pictureBox1.Image = Image.FromFile("image.jpg"); 

或附上书面文件procces:

using (Stream fs1 ...) 
{ 
    ... 
    fs1.Write(bytes, 0, bytes.Length); 
}