使用控制台应用程序进行 C# 图像处理,抛出“内存不足”;例外
我有一个控制台应用程序,可以成功地调整图像大小,同时保持纵横比。
我现在需要裁剪图像,我正在使用的代码如下:
using (var thumbnail = CropPicture(image, rectangle)) {
EncoderParameters encParams = new EncoderParameters(1);
encParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)90);
thumbnail.Save(destination, GetImageCodecInfo(image.RawFormat), encParams);
}
public static Image CropPicture(Image source, Rectangle cropArea) {
using (var bitmap = new Bitmap(source)) {
return (Image)(bitmap.Clone(cropArea, source.PixelFormat));
}
}
它似乎在线路上抛出内存不足异常
return (Image)(bitmap.Clone(cropArea, source.PixelFormat));
任何想法发生了什么?我认为这是一个打开的文件不能100%确定。
I have a console application that successfully re-sizes an image while maintaining aspect ratio.
I now need to crop the image the code I am using is below:
using (var thumbnail = CropPicture(image, rectangle)) {
EncoderParameters encParams = new EncoderParameters(1);
encParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)90);
thumbnail.Save(destination, GetImageCodecInfo(image.RawFormat), encParams);
}
public static Image CropPicture(Image source, Rectangle cropArea) {
using (var bitmap = new Bitmap(source)) {
return (Image)(bitmap.Clone(cropArea, source.PixelFormat));
}
}
It seems to be throwing an Out of memory exception on the line
return (Image)(bitmap.Clone(cropArea, source.PixelFormat));
Any ideas what's going on? I think it's an open file can't be 100% sure.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为什么不在 using 语句中返回图像之前创建一个引用,而不是在 using 中返回图像。
我不确定,但在返回图像之前,位图似乎没有被释放。
instead of returning the Image inside the using why not create a reference before returning it inside the using statement.
I'm not sure but it looks like the Bitmap is not disposed before you return the image.
根据 MSDN 文档,Bitmap.Clone(Rectangle, PixelFormat) 可以如果第一个参数是“源位图边界之外”,则抛出 OutOfMemoryException。
验证 Bitmap.Clone 的第一个参数;确保矩形完全在图像的范围内。
According to the MSDN documentation, Bitmap.Clone(Rectangle, PixelFormat) can throw an OutOfMemoryException if the first parameter is "outside of the source bitmap bounds".
Verify the first parameter to
Bitmap.Clone
; make sure that the rect is entirely within the bounds of the image.