1

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

问题是程序启动时的加载时间,在快速机器上约为 1s。显然,最坏的罪魁祸首是 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;
4

1 回答 1

0
  1. You say "A simple 'create on first use' method instantiates this TDataModule", but then say the problem is the startup time. When the datamodule is created actually?
  2. Did you profile the application to ensure is the image list loading the problem?
  3. If the problem is actually the image list, did you need pngs? If they are stored as such, they need to be decoded and added to the imagelist bitmap. ImageList_LoadImage() can load a bitmap in one step.
于 2010-10-28T13:26:09.127 回答