我想从一组例如30位图中显示一个表格上的一个小数字。我在这个表单上放置了几个TImage组件,并在设计时加载了图像。现在,我想在表单开始时交换图像,同时将位图从TImagelist加载到Timage组件中。我失败了,因为Timagelist只能保存多达128 x 128像素的图像。
问:如何为大型图像制作图像列表?
我别无选择:
发布于 2015-06-09 21:04:22
因此,您希望能够按需显示这30幅位图中的任何一幅,但不希望在需要时从外部文件中加载它们。我想这是因为你担心HDD的性能会阻碍你足够快地显示这些图像。
我认为有几种选择:
第一个选项是将这些映像放在单独的文件中,然后在应用程序启动时将它们加载到多个TBitmap类中(每个映像有一个TBitmap )。然后,当您需要在表单上显示特定的图像时,只需将特定的位图指定为您想要显示该图像的所需TImage组件的图片源。
如果您不想为您的应用程序分发30+文件,您可以将所有这些图像放在一个归档文件中,然后在应用程序开始时将它们加载到不同的位图类中,就像我前面描述的那样。
如果您只想为您的应用程序拥有一个文件,那么您可以将这些图像放入资源文件中,然后将该资源文件构建到您的可执行文件中。一旦您这样做,您就可以访问所有这些图像作为资源。我认为,关于如何利用不久前在这里张贴的资源进行工作,我认为存在一个问题。
现在,如果您不知道如何使用资源,并且不愿意学习,您可以使用一些图像编辑软件将所有这些图像放到一个大图像中。然后,您可以在窗体上设置一个TImage控件,并在设计时设置该大图像。
这将直接将图像数据集成到DFM中,这可能会由于DFM中的大图像数据而导致格式创建速度稍慢。
现在,通过将大图像画布的一部分复制到所需的TImage组件的画布上,可以显示您想要的图像。实际上,您不再需要为此使用TImage组件。任何带有画布的组件都可以。
最后一种选择类似于使用Atlas位图-se,或者有时类似于处理Sprite图像。
Arioch建议的来自Graphics32库的组件内部使用了非常类似的方法。
https://stackoverflow.com/questions/30739128
复制相似问题