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

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.}

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

我真的很困惑:(


胡说叔叔
浏览 848回答 3
3回答

慕桂英546537

GDI +中发生了一般错误。 也可能是因为保存路径不正确!我花了半天才注意到这一点。因此,请确保您已双重检查路径以保存图像。

蓝山帝景

复制位图。您必须在位图的生命周期内保持流打开。绘制图像时:System.Runtime.InteropServices.ExternalException:GDI中发生一般错误    public static Image ToImage(this byte[] bytes)     {         using (var stream = new MemoryStream(bytes))         using (var image = Image.FromStream(stream, false, true))         {             return new Bitmap(image);         }     }     [Test]     public void ShouldCreateImageThatCanBeSavedWithoutOpenStream()     {         var imageBytes = File.ReadAllBytes("bitmap.bmp");         var image = imageBytes.ToImage();         image.Save("output.bmp");     }
打开App,查看更多内容
随时随地看视频慕课网APP