c# - 在 C# 中调整图像大小

标签 c# bitmap resize

我正在编写代码以在 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();

最佳答案

与其分两步复制位图,不如一步复制。这样可以大大减少内存使用量,因为内存中不会同时有原始图像的两个副本。

foreach (string strJPGImagePath in strarrFileList) {
  Bitmap bmpDest;
  using(Bitmap bmpOrig = new Bitmap(strJPGImagePath)) {
    bmpDest = new Bitmap(bmpOrig, new Size(100, 200));
  }
  bmpDest.Save(strJPGImagePath, jgpEncoder, myEncoderParameters);
  bmpDest.Dispose();
}

关于c# - 在 C# 中调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748270/

相关文章:

c# - websocket 成功握手,但没有正确发送接收消息(C# 服务器)

c# - 绑定(bind)Xaml位图图像

c# - 如果我知道背景颜色,如何创建图像轮廓?

c# - 无法在 Android 9,10 Xamarin 上获得媒体播放器声音

c# - IList<InterfaceType> 到 List<ImplementsInterfaceType>?

c# - 没有注册名为 'Default'的IUserTwoFactorTokenProvider。问题是两(2)个ASP.NET Core Identity注册中的AddDefaultTokenProviders()

javascript - 在窗口调整大小时刷新 svg 坐标

android - 大图像抛出 OutOfMemoryError

java - 如何相对于另一个组件布局组件?

ExtJS 属性网格可调整大小的列?