【问题标题】:How to Reduce the Memory usage of ImageList如何减少 ImageList 的内存使用量
【发布时间】:2011-12-02 07:59:18
【问题描述】:

我使用以下代码从文件中获取图像,通过添加文件夹中的所有文件并最终将其链接到列表视图控件以显示缩略图来创建图像列表。问题是如果我添加 300 个图像,该程序使用超过 700MB 的内存。图像列表占用大量内存。有什么方法可以在运行时压缩/重新缩放图像以减少内存使用量,或者有什么替代方法。

                        this.t.Images.Add(Image.FromFile(f));
                        Filelist.Items.Add(f.ToString());
                        ListViewItem item = new ListViewItem();
                        this.listview.Items.Add(item);

【问题讨论】:

标签: c# .net image graphics gdi+


【解决方案1】:

将图像加载到临时文件中,将其调整为新图像,然后将调整后的图像保存在列表中。

using (var tempImage = Image.FromFile(f))
{
    Bitmap bmp = new Bitmap(thumbnailWidth, thumbnailHeight);
    using (Graphics g = Graphics.FromImage(bmp))
    {
        g.DrawImage(tempImage, new Rectangle(0, 0, bmp.Width, bmp.Height);
    }
    t.Images.Add(bmp);
}

【讨论】:

  • 谢谢。即使不调整大小,只需使用“使用”语句即可解决问题。
  • @rainbower:关于Image.FromFile,要记住的重要一点是文档中的声明,“文件保持锁定直到图像被释放。”您的代码不仅有一堆图像,还打开了 300 个文件。上面的代码复制图像(在我的例子中,调整它的大小),然后销毁原始图像并关闭文件。
猜你喜欢
  • 2018-07-12
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
相关资源
最近更新 更多