下面是我的代码抛出异常,因为我在内存流中使用'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");
答案 0 :(得分:1)
GDI +并不总是将图像加载到内存中,而是推迟了这个操作(当你从句柄创建图像时会发生同样的事情,比如图标)。如果要确保位图保留在内存中,请创建一个位图并将另一个位图绘制到新位图上。
不幸的是,这没有很好的记录,我之前一直在讨论这些问题。在内部,它是在扁平GDI + API中调用GdipCreateBitmapFromStream。
Here is a statement from MS (newsgroup post by John Hornick).