C#使用控制台应用程序进行图像处理';内存不足';例外情况
我有一个控制台应用程序,可以成功地重新调整图像大小,同时保持纵横比 我现在需要裁剪图像,我使用的代码如下:C#使用控制台应用程序进行图像处理';内存不足';例外情况,c#,console-application,image-manipulation,crop,C#,Console Application,Image Manipulation,Crop,我有一个控制台应用程序,可以成功地重新调整图像大小,同时保持纵横比 我现在需要裁剪图像,我使用的代码如下: using (var thumbnail = CropPicture(image, rectangle)) { EncoderParameters encParams = new EncoderParameters(1); encParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Qua
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%确定。根据示例,如果第一个参数是“源位图边界之外”,则会抛出OutOfMemoryException
验证位图的第一个参数。克隆;确保rect完全在图像的边界内。而不是在using语句中返回图像,为什么不在using语句中返回图像之前创建引用呢
public static Image CropPicture(Image source, Rectangle cropArea) {
Bitmap retImg;
using (var bitmap = new Bitmap(source)) {
retImg = bitmap.Clone(cropArea, source.PixelFormat);
}
return (Image)regImg;
}
我不确定,但在您返回图像之前,位图似乎未被处理。感谢您的回复此答案和另一个帮助我解决问题的答案,正在获取包括临时缩略图在内的所有图像。。。无限循环。这让我找到了你的答案,最终图像变成了15x15,矩形超范围,干杯:)