读书人

icon图标文件ExtractIconEx、Extrac

发布时间: 2012-07-31 12:33:46 作者: rapoo

icon图标文件,ExtractIconEx、ExtractIcon方法取应用程序图标问题
已知一个icon图标文件中可以包含多个分辨率图标。

于是我使用IconWorkshopPortable软件做了一个图标文件。
该文件中包含7个不同分辨率的图标,分别是:
16*16、32*32、48*48、64*64、72*72、128*128、128*32 其中
分别编辑每个分辨率的图标内容,让图标在不同分辨率上显示不同
(比如16*16的图片是数字16、32*32的图片是数字32)
从而得知当前显示的到底是那种分辨率的。所有格式都采用RGB/A色彩。

保存为图标文件后,在系统中此图标显示不同点如下:(WindowsXP系统)
-------------------------------------
显示方式 文件显示的图标尺寸
-------------------------------------
缩略图 16*16
平铺 48*48
图标 32*32
列表 16*16
详细信息 16*16
-------------------------------------
(文件属性上写的是16*16 120KB)

打开delphi写一空程序,将窗体图标和工程图标都引用该图标文件。显示效果如下:
程序编写时 窗体图标显示为 32*32
程序运行时 窗体图标显示为 16*16
任务栏图标显示为 16*16
exe文件图标在不同显示方式下显示为:
-------------------------------------
显示方式 文件显示的图标尺寸
-------------------------------------
缩略图 48*48
平铺 48*48
图标 32*32
列表 16*16
详细信息 16*16
-------------------------------------

对应图标文件,在缩略图显示模式中显示不一致,
但可以看出 exe程序中,至少包含了 16*16 32*32 48*48 三种格式大小。

接下来,用delphi另写一程序,获取前面exe文件的图标信息时麻烦了。
ExtractIconEx、ExtractIcon 函数获取该exe文件图标数量为1
ExtractIcon 只能取出32*32尺寸图标
ExtractIconEx 的大图标、小图标分别是 32*32 及16*16 两种尺寸的。
并且将图标保存后在IconWorkshopPortable中打开是16色模式了。

问题来了:
1、肉眼可以清晰看出 在“图标”显示方式下,exe文件的图标和从exe中取出的ico文件图标色彩数不一样
估计exe文件中的图标仍然是rgb色彩 而取出来的只有16色。如何取出原图标?
2、在“缩略图”和“平铺”模式下,exe文件命名显示的是48*48尺寸的图标,
这个尺寸的该如何取出?
3、delphi编译的程序中,到底会包含多少种分辨率的图标?
是否将icon图标文件中的所有尺寸的图标都包含进去了呢?
4、delphi以外的程序,比如C#、VB、VC等语言编写的程序,
其图标是否和delphi编写的程序是相同的呢?

遗留问题:1、未在win7的各种显示方式中测试会显示成啥样。晚上回家试。
2、用代码替换之前那exe文件图标的时候会出现啥情况。

有高手知道此现象么?


[解决办法]
个人愚见:
编译以后加进去的和原来的图标有区别的吧
原来的图标经过编译都成二进制码到执行文件里去了。再取出来和原来的图片比肯定是有差别的。
[解决办法]
看本人的靖源Exe图标转换器 ,www.dxmylove.com

读书人网 >.NET

热点推荐