如何改善Delphi TPngImageList(或TImageList)的加载时间

时间:2010-10-28 09:24:05

标签: delphi timagelist tpngimagelist

我在我的应用程序中使用了一组约100个图标,这些图标可以使用固定的参考编号进行访问,这些编号也可供用户选择图标。所需的三种分辨率为16x16,32x32和48x48。这些分辨率中的每一个都保存在TPngImageList中,并且我使用TDataModule创建了一个“图标库”,而不是包含这三个图像列表(TArtImageLibraryImageLists)。当需要任何图像列表时,简单的“首次使用时创建”方法会实例化此TDataModule。只需通过调用所需的分辨率函数来设置LargeImages或任何需要访问图像列表的控件的某些属性。

问题是程序启动时的加载时间,在快速计算机上约为1秒。显然最坏的罪魁祸首是48x48图像列表,但我想知道是否有更好的加载机制(例如使用资源文件?),这将加快速度。或者有没有办法重新格式化图像列表?我仍然需要在运行时使用TImageList,例如我的TreeView等。

谢谢, 布赖恩。

var
  FInstance : TArtImageLibraryImageLists;

function ArtImageLibraryImageLists : TArtImageLibraryImageLists;
begin
  If not Assigned( FInstance ) then
    FInstance := TArtImageLibraryImageLists.Create( nil );
  Result := FInstance;
end;


function ArtIconLibraryImageList16 : TImageList;
begin
  Result := ArtImageLibraryImageLists.ImageList16;
end;

function ArtIconLibraryImageList32 : TImageList;
begin
  Result := ArtImageLibraryImageLists.ImageList32;
end;

function ArtIconLibraryImageList48 : TImageList;
begin
  Result := ArtImageLibraryImageLists.ImageList48Shadow;
end;

1 个答案:

答案 0 :(得分:0)

  1. 你说“首次使用'简单'创建'方法实例化这个TDataModule”,但后来说问题是启动时间。实际创建数据模块的时候?
  2. 您是否对应用程序进行了分析以确保图像列表加载问题?
  3. 如果问题实际上是图像列表,你需要png吗?如果它们是这样存储的,则需要对它们进行解码并将其添加到图像列表位图中。 ImageList_LoadImage()可以一步加载位图。