Delphi 如何从图标中提取特定大小的图像?

Delphi 如何从图标中提取特定大小的图像?,delphi,delphi-2010,Delphi,Delphi 2010,如何从具有多个图像的图标中提取特定大小的图像或所有图像?您不知道这是为了什么,获取图标的方法有很多种,根据用途不同,一种方法可能优于另一种方法 但是,要从任意文件中提取任意数量的“大”(32x32)和/或“小”(16x16)图标*,请使用该函数。这使您可以从图标文件(.ico)、EXE或DLL中提取这两种标准大小之一的一个或多个图标。一个图标文件可以包含多个图像,此函数将允许您获取所有图像 函数将写入句柄数组,每个句柄都可以分配给TIcon实例的Handle属性。然后,如果您以任何其他方式加载T

如何从具有多个图像的图标中提取特定大小的图像或所有图像?

您不知道这是为了什么,获取图标的方法有很多种,根据用途不同,一种方法可能优于另一种方法

但是,要从任意文件中提取任意数量的“大”(32x32)和/或“小”(16x16)图标*,请使用该函数。这使您可以从图标文件(.ico)、EXE或DLL中提取这两种标准大小之一的一个或多个图标。一个图标文件可以包含多个图像,此函数将允许您获取所有图像

函数将写入句柄数组,每个句柄都可以分配给
TIcon
实例的
Handle
属性。然后,如果您以任何其他方式加载TIcon,您可以像平常一样使用。请注意,Delphi XE的新功能是能够轻松地将其复制到位图。还显示了如何访问所有库存(内置/标准)窗口图标,如果您正需要这些图标

(旁注:我认为该类允许您通过其
LoadFromFile
方法从文件中加载-文档中似乎没有这一点,但我非常确定它存在。从内存来看,它只加载一个图标。)

(*)实际上,“大”和“小”可以 与32x32和16x16不同:使用 这个 具有
SM\U CXICON
的功能,
SM\u cycon
SM\u CXSMICON
,以及
SM\u CYSMICON
标记以查找 每种类型的尺寸


@大卫,谢谢你!我有TIcon对象,我需要从中提取所有图像。有没有办法不通过SaveToFile方法将图标保存到文件中?TIcon将是一个图标图像。使用
ExtractIconEx
可以为它提取的每个图标图像创建一个TIcon。然后,您可以通过将图标分配到位图来访问图标图像。(您是否已填充句柄数组?尝试调用
ExtractIconEx
两次,第一次将
nIconIndex
设置为-1,两个数组参数
nil
,它将返回图标数。使用该大小的数组再次调用它。有关详细信息,请参阅MSDN文章。)@David,TIcon是一个图像图标,如果它是通过ExtractIconEx获得的,但如果现有的TIcon对象有多个图像呢。如果我将带有4个图像的TIcon保存到文件(oIcon.SaveToFile)中,并使用Iconditor打开此文件,我可以看到所有4个图像,并且可以使用ExtractIconEx提取所有4个图像。是否可以从TIcon对象中提取所有图像,而不是将TIcon保存到文件并使用ExtractIconEx?首先,如何获得具有多个图像的TIcon?如果它在某个时候来自某个文件,则可以使用ExtractIconEx。如果没有,你如何制作或找到它?恐怕我有点搞不清楚你有什么…在Graphics.pas中,有一个ReadIcon方法,它从一个流中解析一个图标内存图像,并从中提取一个大小最好的图标。您可以使用该代码作为起点(注意版权,使用它学习技术),但可以根据不同的标准选择要提取的图像。