Rav*_*and 1 c# resize using bitmap argumentexception
所以我目前正在开发一个工作/工作得非常好的图像缩放器,但是当我一次处理太多图像时崩溃程序时它给了我一个OutOfMemoryException.
所以为了解决这个问题,我已经将方法包装在using语句中,这样可以正确处理Bitmaps.
但是我注意到如果我在using语句中返回我的Bitmap,我得到这个"ArgumentException未处理"消息
这是我的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;
}
Run Code Online (Sandbox Code Playgroud)
在这里,当我尝试将图像保存在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
}
Run Code Online (Sandbox Code Playgroud)
当我删除using语句时,一切都工作得很好,但是我必须使用using块来处理Bitmap,以防止内存泄漏.此外,当我将图像保存在using语句中时,它也可以正常工作,但在我的情况下,这不是解决方案.
我究竟做错了什么?对我来说,似乎没有正确返回Bitmap.
我感谢任何帮助,并提前感谢Ravand
你把你的使用放在了错误的地方.在使用块结束(包括从其返回)之后,布置由块控制的对象.访问配置的位图是一个错误.
您的使用需要在这里:
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);
}
}
Run Code Online (Sandbox Code Playgroud)