【问题标题】:How can I extract an image of a specific size from an icon?如何从图标中提取特定大小的图像?
【发布时间】:2010-09-28 14:32:44
【问题描述】:

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

【问题讨论】:

    标签: delphi delphi-2010


    【解决方案1】:

    您没有说明这样做的目的是什么,并且有多种获取图标的方法,根据目的,一种方法可能比另一种更好。

    但是,要从任意文件中提取任意数量的“大”(32x32) 和/或“小”(16x16) 图标*,请使用ExtractIconEx 函数。这使您可以从图标文件 (.ico)、EXE 或 DLL 中提取这两种标准尺寸中的一种或多种图标。一个图标文件可以包含多张图片,这个功能可以让你得到所有的图片。

    该函数将写入一个句柄数组,您可以将每个句柄分配给TIcon 实例的Handle 属性。然后,您可以像往常一样使用TIcon methods,如果您以任何其他方式加载TIcon。请注意,Delphi XE 的新功能是能够轻松地将其复制到位图via the Assign methodThat article 还展示了如何访问所有库存(内置/标准)Windows 图标,如果这恰好是您所追求的。

    (旁注:我认为TIcon 类允许您通过其LoadFromFile 方法从文件加载 - 这似乎从文档中丢失,但我很确定它存在。从记忆中,只有加载单个图标。)

    (*) 其实“大”和“小”都可以 不同于 32x32 和 16x16:使用 这 GetSystemMetricsSM_CXICON 一起使用, SM_CYICONSM_CXSMICONSM_CYSMICON标志找出 每种类型的尺寸。

    【讨论】:

    • @David,谢谢!我有 TIcon 对象,我需要从中提取所有图像。如果不通过 SaveToFile 方法将图标保存到文件,有什么方法可以做到这一点?
    • TIcon 将是一个图标图像。使用ExtractIconEx,您将为它提取的每个图标图像创建一个TIcon。然后,您可以通过Assign-ing 到位图来访问图标的图像。 (你得到了一个句柄数组吗?尝试调用ExtractIconEx两次,第一次将nIconIndex设置为-1,两个数组参数nil,它将返回图标的数量。再次调用它该大小的数组。有关详细信息,请参阅 MSDN 文章。)
    • @David,TIcon如果是通过ExtractIconEx获取的,是一个图像图标,但是如果现有的TIcon对象有多个图像怎么办。如果我将带有 4 个图像的 TIcon 保存到文件 (oIcon.SaveToFile) 并使用 IconEditor 打开此文件,我可以看到所有 4 个图像,并且我可以使用 ExtractIconEx 提取所有 4 个图像。是否可以从 TIcon 对象中提取所有图像,而不是将 TIcon 保存到文件并使用 ExtractIconEx?
    • 首先如何获得包含多个图像的 TIcon?如果它来自某个文件,您可以使用 ExtractIconEx。如果没有,你如何制作或找到它?我对你有什么感到有点困惑,恐怕......
    • 在 Graphics.pas 中,有一个 ReadIcon 方法,它从流中解析图标内存图像并从中提取一个最佳大小的图标。您可以使用该代码作为起点(注意版权,使用它来学习技术),但可以根据不同的标准选择要提取的图像。
    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2012-06-28
    • 2022-10-02
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多