2009-11-19 10 views
0

是我的代码,因为我现在用的是“使用”的语句与存储流,也就是说,它被置于端会抛出异常当我尝试保存图像时会抛出异常。一般性错误+关闭存储流或使用时,“使用”记忆流低于

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

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

不幸的是,这不是有据可查的,我也有这样的问题之前已经struggeling。在内部,它是在平坦的GDI + API中调用GdipCreateBitmapFromStream

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