delphi提取文件中的ICO图标的问题,保存到本地全部都是32* 32的,如何判断图标尺寸?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi提取文件中的ICO图标的问题,保存到本地全部都是32* 32的,如何判断图标尺寸?相关的知识,希望对你有一定的参考价值。

ico.Handle := ExtractIcon(HInstance, PChar(SearchPath + sr.Name), 0);
ico.savetofile('c:\a.ico');

用delphi 实现了从dll文件中提取ICO图标的功能,但是保存到本地的图标却全部都是32*32的,这样导致图标显示很不光滑。如何解决这个问题,关键是如何判断解析出来的图标尺寸是多大。
我是想自己用程序来实现,这样比较灵活,我想怎么获取就怎么获取。现在我是选择一个文件夹,将该文件夹中的所有DLL和EXE文件都遍历一下,将其中的ICO文件提取出来保存到一个指定的文件夹。本来我是使用ICOWORKSHOP来提取的,但这个工具只能每次选择一个文件,并且有些文件中还不包含有图标,这样效率很低。

你是想获得图标的话,建议使用专门的图标提取工具
AWicons Pro
║ 软件介绍: ║
║ Awicons 是一个搜索,创建,编辑,导入/导出,管理图标,光标,和小 ║
║ 型图片的强力工具! ║
║ 具体功能如下: ║
║ 1.全面支持Windows XP的图标! ║
║ 2.支持包括ico, cur, ani, png, gif, bmp, jpg在内的多种文件 ║
║ 格式! ║
║ 3.支持所有的颜色格式!包括mono, 16, 256, true-color, ║
║ true-color with alpha! ║
║ 4.最大可以创建128 x 128 大小的图标! ║
║ 5.可以自动对硬盘里的图标,光标和图片进行扫描! ║
║ 6.自带多种画笔,多种强力虑镜,使你的编辑 ║
║ 创建更加轻松自如! ║
║ 7.支持直接从dll,EXE文件中提取图标! ║
║ 8.支持图标库!
参考技术A 提取文件中所有的图标(exe 或者 dll):
procedure GetIconFromFileEx(const f: string);
var
i: Integer;
Large, Small: HICON;
LIcon, SIcon: TIcon;
nIcons: Integer;
begin
LIcon := TIcon.Create;
SIcon := TIcon.Create;
nIcons := ExtractIconEx(PChar(f), -1, Large, Small, 2);
for i:=0 to nIcons-1 do
begin
ExtractIconEx(PChar(f), i, Large, Small, 2);
LIcon.Handle := Large;
SIcon.Handle := Small;
LIcon.SaveToFile(Format('%s\l%d.ico', [ExtractFilePath(f), i]));
SIcon.SaveToFile(Format('%s\s%d.ico', [ExtractFilePath(f), i]));
end;

FreeAndNil(LIcon);
FreeAndNil(SIcon);
end;追问

japhe 的回答只能得到16*16或32*32的,对于其它大小的还是不行。另外,你是把一个文件保存为一大一小两个ICO文件,还是不能确定这个图标的实际大小应该是多大的。

如何创建qt图标

1、首先准备一个图标文件,假设叫1.ico;
2、然后新建个文本文件,里面只有一行内容:
IDI_ICON1 ICON "1.ico"
另存为名字改为icon.rc;
3、在项目的pro文件中加入如下内容:
RC_FILE += icon.rc
保存,重新编译就可以了
参考技术A 类型列表,以下是3种方法。
----1.删除您不使用的程序的文件类型,最好是卸载整个应用程序。可以利用“控制面板”中的“添加/删除程序”功能。此操作同时会将“新建”菜单的文件列表中的相应项目删除。
----2.如果您自行卸载软件后,该文件类型的菜单选项仍然存在,请进入资源管理器选择“查看”*“文件夹选项”,单击“文件类型”选项卡,选取您不再使用的文件类型,单击“删除”按钮,确认删除。如此可将文件类型从关联文件菜单、注册表以及“新建”菜单中删除。
----3.如果您需要保留与文件类型相关的应用程序,只想删除“新建”菜单中的图标,请按前面说明打开注册表编辑器。单击“HKEY_CLASSES_ROOT”前的“+”号,找出含有您要删除的文件类型的扩展名的文件夹,单击旁边的“+”号。在左边的树状图中,选取正确扩展名下的“ShellNew”文件夹。此时,您可以制作一个此注册表分支的备份,以便您恢复原有的设置(选择“注册表”*“导出注册表文件”,指定文件名称及保存的位置,“导出范围”项目中必须选中“选择的分支”,然后单击“保存”)。在右边窗口中选取“NullFile”或“FileName”,按下Delete键,然后按Enter键。如果您希望将此项目恢复到功能表中,请找到您导出的.reg文件,双击将其恢复到注册表中
参考技术B png格式的图片都可以,直接放到qtc中,在程序总引用就可以了

以上是关于delphi提取文件中的ICO图标的问题,保存到本地全部都是32* 32的,如何判断图标尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

怎样更改已生成的exe文件的ico图标

如何更改delphi7中窗体(form)左上角的图标?都支持那些类型的图标,如,ico,jpe?为何更改图标后显示出错呢?不

怎么制作ICO图标使背景颜色为透明?

如何给生成的exe加上ico图标

如何将 HTML5 <canvas> 保存为 ICO 图像(图标文件)或 .cur 文件(静态鼠标光标)而不是 JavaScript 中的 PNG?

如何从exe文件中抽取ico文件?