【发布时间】:2014-07-15 00:41:04
【问题描述】:
我正在编写代码以在 C# 中调整 JPG 图像的大小。我的代码需要大约 6 秒来调整 20 张 JPG 图像的大小。我想知道在 C# 中是否有更快的方法来做到这一点?任何改善这一点的建议都值得赞赏!
这是我的代码:
Bitmap bmpOrig, bmpDest, bmpOrigCopy;
foreach (string strJPGImagePath in strarrFileList)
{
bmpOrig = new Bitmap(strJPGImagePath);
bmpOrigCopy = new Bitmap(bmpOrig);
bmpOrig.Dispose();
File.Delete(strJPGImagePath);
bmpDest = new Bitmap(bmpOrigCopy, new Size(100, 200));
bmpDest.Save(strJPGImagePath, jgpEncoder, myEncoderParameters);
bmpOrigCopy.Dispose();
bmpDest.Dispose();
}
感谢@Guffa 的解决方案。我将 dispose() 移出 foreach 循环。更新快的代码是:
Bitmap bmpDest = new Bitmap(1, 1);
foreach (string strJPGImagePath in strarrFileList)
{
using (Bitmap bmpOrig = new Bitmap(strJPGImagePath))
{
bmpDest = new Bitmap(bmpOrig, new Size(100, 200));
}
bmpDest.Save(strJPGImagePath, jgpEncoder, myEncoderParameters);
}
bmpDest.Dispose();
【问题讨论】:
-
第一:我认为工作代码应该发布在代码审查论坛上;这里codereview.stackexchange.com。第二:你为什么要处理和清理前循环内的阵列?可能你应该重用现有对象并在循环完成后清理所有内容
-
当然 - 我这样做了,但它显示我内存不足异常!
-
@Guffa 解决方案怎么样?
-
@stackunderflow:以这种方式创建位图时,重用位图是行不通的。如果你想重用它,你需要将加载的位图绘制到现有的位图上,并且所有加载的位图仍然必须被释放。