Image.Save(..)抛出GDI +异常,因为内存流已关闭

我有一些要保存为图像的二进制数据。当我尝试保存图像时,如果用于保存图像的内存流在保存之前已关闭,则会引发异常。我这样做的原因是因为我正在动态创建图像,因此我需要使用内存流。

这是代码:

[TestMethod]

public void TestMethod1()

{

// Grab the binary data.

byte[] data = File.ReadAllBytes("Chick.jpg");

// Read in the data but do not close, before using the stream.

Stream originalBinaryDataStream = new MemoryStream(data);

Bitmap image = new Bitmap(originalBinaryDataStream);

image.Save(@"c:\test.jpg");

originalBinaryDataStream.Dispose();

// Now lets use a nice dispose, etc...

Bitmap2 image2;

using (Stream originalBinaryDataStream2 = new MemoryStream(data))

{

image2 = new Bitmap(originalBinaryDataStream2);

}

image2.Save(@"C:\temp\pewpew.jpg"); // This throws the GDI+ exception.

}

有谁对我如何在关闭流的情况下保存图像有任何建议?保存图像后,我不能依靠开发人员记住关闭流。实际上,开发人员不会想到该图像是使用内存流生成的(因为它发生在其他地方的其他代码中)。

我真的很困惑:(

回答:

由于它是MemoryStream,因此您实际上 不需要 关闭流-

如果不这样做,则不会发生任何不好的事情,尽管显然,处置任何一次性的东西都是一种好习惯。(有关更多信息,请参见此问题。)

但是,您 应该 处理位图-

这样将为您关闭流。基本上,一旦给Bitmap构造函数一个流,它就“拥有”该流,并且您不应该关闭它。正如该构造函数的文档所述:

您必须在位图的生存期内保持流打开。

放置位图时,我找不到任何承诺关闭流的文档,但是您应该能够轻松地进行验证。

以上是 Image.Save(..)抛出GDI +异常,因为内存流已关闭 的全部内容, 来源链接: utcz.com/qa/399156.html

回到顶部