使用控制台应用程序进行 C# 图像处理,抛出“内存不足”;例外

发布于 2024-09-26 14:38:22 字数 733 浏览 4 评论 0原文

我有一个控制台应用程序,可以成功地调整图像大小,同时保持纵横比。

我现在需要裁剪图像,我正在使用的代码如下:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

滴情不沾 2024-10-03 14:38:22

为什么不在 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;
}

我不确定,但在返回图像之前,位图似乎没有被释放。

instead of returning the Image inside the using why not create a reference before returning it inside the using statement.

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;
}

I'm not sure but it looks like the Bitmap is not disposed before you return the image.

回忆凄美了谁 2024-10-03 14:38:22

根据 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文