c# - 在 using 语句中返回后的位图 ArgumentException

标签 c# bitmap resize using argumentexception

所以我目前正在研究一个图像缩放器,它工作/工作得很好,但除了当我一次处理太多图像导致程序崩溃时它给了我一个 OutOfMemoryException。

因此,为了解决这个问题,我将方法包装在 using 语句中,以便可以正确处理位图。

但是我注意到,如果我在 using 语句中返回我的位图,我会收到此“ArgumentException was unhandled”消息

这是我的 ImageResize 方法:

 public Bitmap ResizeImage(MemoryStream ms, Size size)
    {
        if (comboBox2.Text == "Pixel")
        {
            using (Bitmap img = new Bitmap(new Bitmap(ms, true), size.Width, size.Height))
            {
                var original = new Bitmap(ms, true);
                Graphics graphic = Graphics.FromImage(img);

                //IRRELEVANT CODE.....

                return img;
            }
        }
        else
        {
            return null;
        }

在这里,当我尝试在 ImageResize 方法之外保存我的图像时:

private void button1_Click(object sender, EventArgs e)
    {
    //IRRELEVANT CODE ...
    img = ResizeImage(memory, new Size(getX(), getY()));
    //IRRELEVANT CODE ...
    img.Save(outputFileName, codec, encoderParams); //<-Exception occurs here
    }

当我删除 using 语句时,一切再次正常工作,但是我必须使用 using block 来处理位图,从而防止内存泄漏。 此外,当我将图像保存在 using 语句中时,它也能正常工作,但这不是我的解决方案。

我做错了什么?在我看来,位图似乎没有正确返回。

我感谢任何帮助并提前致谢 拉旺

最佳答案

你把你的 using 放错地方了。在 using block 结束后(包括从它返回),该 block 控制的对象被释放。访问已处置的位图是错误的。

您的 using 需要在这里:

private void button1_Click(object sender, EventArgs e)
{
    //IRRELEVANT CODE ...
    using(img = ResizeImage(memory, new Size(getX(), getY())))
    {
        //IRRELEVANT CODE ...
       img.Save(outputFileName, codec, encoderParams);
    }
}

关于c# - 在 using 语句中返回后的位图 ArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27062175/

相关文章:

c# - 在 NuGet 中包含控制台应用程序的最佳实践

c# - Dictionary<string,/> 是什么意思?

java - Android - 如何将位图列表作为参数传递给另一个 Activity

android - 无法从共享首选项中保存的 URI 加载图像

javascript - 移动浏览器上的全视口(viewport)固定位置 Canvas

Qt 无法设置几何图形

c# - .Net 正则表达式处理中 "$"限定符的潜在不当行为

c# - 如何在 Silverlight 中加载 xml 文件并从中读取?

android - 如何将图片文件保存为BMP格式?

javascript - 在加载页面之前根据屏幕分辨率调整所有图像的大小