用于大图像的TImagelist

时间:2015-06-09 17:41:02

标签: delphi bitmap

我想从一组例如30位图表格上的小数字。我在这个表单上放置了几个TImage组件,并在设计时加载了图像。现在我想在表单开始时将图像从TImagelist加载到Timage组件中来交换图像。我失败了,因为Timagelist只能保存最大128 x 128像素的图像。

问:如何制作大图像的图像列表?

对我来说没有选择:

  1. 在启动期间加载文件中的图像.....
  2. 放置40个Timages 在我的表单上,用TImage [i] .visible:= true;
  3. 显示正确的表格

1 个答案:

答案 0 :(得分:1)

因此,您希望能够按需显示这30个位图中的任何一个,但您不希望在需要时从外部文件加载它们。我想这是因为你担心硬盘性能会使你无法足够快地显示这些图像。

我看到了几个选项:

第一个选项是将这些图像放在单独的文件中,然后在应用程序启动时将它们加载到多个TBitmap类中(每个图像一个TBitmap)。然后,当您需要在表单上显示特定图像时,只需将特定位图指定为所需TImage组件的图像源,您希望在该组件上显示该图像。

如果您不想为您的应用程序分发30+文件,您可以将所有这些图像放入单个存档中,然后在应用程序开始时将它们加载到单独的位图类中,如上所述。

如果您只想为您的应用程序提供单个文件,那么您可以将这些图像放入资源文件中,然后将该资源文件构建到您的可执行文件中。完成后,您可以将这些图像作为资源访问。我认为有一个问题是关于使用不久前在SO上发布的资源。

现在,如果您不知道如何使用资源并且不愿意学习,您可以使用一些图像编辑软件将所有这些图像放入一个大图像中。然后,您可以在表单上使用一个TImage控件在设计时设置该大图像。

这会将图像数据直接集成到您的DFM中,由于DFM中的大图像数据,这可能会导致表单创建速度变慢。

现在,您可以通过将部分大图像画布复制到所需TImage组件的画布上来显示所需的图像。事实上,您不再需要使用TImage组件。任何带有画布的组件都可以。

这最后一个选项类似于使用Atlas Bitmap-ses或有时使用Sprite图像。

Arioch建议内部使用的Graphics32库中的组件使用非常相似的方法。