C# 快速创建多个位图对象

C# 快速创建多个位图对象,c#,winforms,bitmap,C#,Winforms,Bitmap,从500多个不同的图像文件创建500多个位图的最快方法是什么?它们需要调整大小并转换为像素格式32bpppargb,以便更快地绘制 我将按如下方式创建每个位图: Bitmap resized; using (Bitmap original = new Bitmap(pathToFile)) { resized = new Bitmap(width, height, PixelFormat.Format32bppPArgb); resized.SetResolution(original.

从500多个不同的图像文件创建500多个位图的最快方法是什么?它们需要调整大小并转换为像素格式32bpppargb,以便更快地绘制

我将按如下方式创建每个位图:

Bitmap resized;
using (Bitmap original = new Bitmap(pathToFile))
{
  resized = new Bitmap(width, height, PixelFormat.Format32bppPArgb);
  resized.SetResolution(original.HorizontalResolution, original.VerticalResolution);
  using (Graphics g = Graphics.FromImage(resized))
  {
    g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    g.DrawImage(original, 0, 0, width, height);
  }
}
我正在运行一个新的BackgroundWorker来处理每个位图的创建,这大大加快了创建过程,但我仍在寻求更高的速度(同时不牺牲图像质量)。预先调整图像大小对于我正在尝试做的事情来说是不可能的


任何帮助都将不胜感激。:)

您需要并行创建位图吗?您可能需要查看
async
wait
。您可以在任务中创建
位图
。我需要并行创建它们,因为任何图像都可能通过鼠标单击访问。对于这个项目,我使用的是.NET Framework 4.0,因此我不确定async和await是否可用。如果为每个映像创建任务列表,则可以通过Task.WhenAll([yourlistoftasks]).ContinueWith(results=>{})来等待所有任务;(因为我在任务库中有很多扩展方法,所以代码很糟糕)。但关键是,它异步执行所有内容,而不阻塞线程,并在所有内容完成时返回。有点酷。如果您已经在使用
BackgroundWorker
,并且您至少同时启动了与CPU内核数量相同的
BackgroundWorker
实例,那么您已经在尽可能快地运行了。如果使用其他线程机制,您可能会发现代码更易于维护,更易于阅读和编写<代码>BackgroundWorker功能在此处似乎未使用。但如果有其他的机制,它不会跑得更快。