delphi提取文件中的ICO图标的问题,保存到本地全部都是32* 32的,如何判断图标尺寸?
ico.Handle:=ExtractIcon(HInstance,PChar(SearchPath+sr.Name),0);ico.savetofile('c:\a.i...
ico.Handle := ExtractIcon(HInstance, PChar(SearchPath + sr.Name), 0);
ico.savetofile('c:\a.ico');
用delphi 实现了从dll文件中提取ICO图标的功能,但是保存到本地的图标却全部都是32*32的,这样导致图标显示很不光滑。如何解决这个问题,关键是如何判断解析出来的图标尺寸是多大。
我是想自己用程序来实现,这样比较灵活,我想怎么获取就怎么获取。现在我是选择一个文件夹,将该文件夹中的所有DLL和EXE文件都遍历一下,将其中的ICO文件提取出来保存到一个指定的文件夹。本来我是使用ICOWORKSHOP来提取的,但这个工具只能每次选择一个文件,并且有些文件中还不包含有图标,这样效率很低。 展开
ico.savetofile('c:\a.ico');
用delphi 实现了从dll文件中提取ICO图标的功能,但是保存到本地的图标却全部都是32*32的,这样导致图标显示很不光滑。如何解决这个问题,关键是如何判断解析出来的图标尺寸是多大。
我是想自己用程序来实现,这样比较灵活,我想怎么获取就怎么获取。现在我是选择一个文件夹,将该文件夹中的所有DLL和EXE文件都遍历一下,将其中的ICO文件提取出来保存到一个指定的文件夹。本来我是使用ICOWORKSHOP来提取的,但这个工具只能每次选择一个文件,并且有些文件中还不包含有图标,这样效率很低。 展开
2个回答
展开全部
你是想获得图标的话,建议使用专门的图标提取工具
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.支持图标库!
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.支持图标库!
展开全部
提取文件中所有的图标(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;
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文件,还是不能确定这个图标的实际大小应该是多大的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询