我有一些二进制数据,想要把它保存为图像。当我尝试保存这个图像时,如果用于创建图片的内存流在保存之前关闭了,它就会抛出异常。我之所以这样做是因为我正在动态创建图像,因此需要使用内存流。
以下是代码:
[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.
}
有没有人有建议,我如何在流关闭的情况下保存图像?我不能依赖开发人员记住在保存图像后关闭流。实际上,开发人员甚至不知道使用内存流生成了图像(因为它是在其他代码的其他地方发生的)。
我真的很困惑:(
using
块内部调用 image2.Save。我认为originalBinaryDataStream2
会在using
结束时自动释放,这可能会抛出异常。 - taynguyen