关闭内存流或对内存流使用“using”时,GDI +中发生一般错误

时间:2009-11-19 10:11:18

标签: c# gdi+

下面是我的代码抛出异常,因为我在内存流中使用'using'语句,即它在最后处理,当我尝试保存图像时抛出异常。

using(MemoryStream memoryStream = new MemoryStream())
  {
    ImageCodecInfo imageEncoder = GetEncoderInfo("image/jpeg");
    EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality);
    EncoderParameters encodeParams = new EncoderParameters(1);
    encodeParams.Param[0] = qualityParam;

    using (Bitmap bitmapImage = new Bitmap(image, width, height))
    {
        bitmapImage.SetResolution(dpi, dpi);
        bitmapImage.Save(memoryStream, imageEncoder, encodeParams);
    }

    Image compressedImage = new Bitmap(memoryStream);
  }
  _compressedImage.Save("C:\\test.jpg");

1 个答案:

答案 0 :(得分:1)

GDI +并不总是将图像加载到内存中,而是推迟了这个操作(当你从句柄创建图像时会发生同样的事情,比如图标)。如果要确保位图保留在内存中,请创建一个位图并将另一个位图绘制到新位图上。

不幸的是,这没有很好的记录,我之前一直在讨论这些问题。在内部,它是在扁平GDI + API中调用GdipCreateBitmapFromStream

Here is a statement from MS (newsgroup post by John Hornick).