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