如何保存程序图标不变色? ( 积分: 100 )

  • 主题发起人 主题发起人 SexyGG
  • 开始时间 开始时间
S

SexyGG

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样才可以保存程序一样色彩的图标到ico
我保存的老变成16色的,弄不懂
 
怎么样才可以保存程序一样色彩的图标到ico
我保存的老变成16色的,弄不懂
 
找个图标编辑工具吧:MicroAngelo V5.59c 汉化版(修正版)
 
delphi的imageedit其实也可以编辑256色的图标,但只能编辑原有的,所以我用
IconCool Editor V4.6 Build 50419
 
我不想用软件的
 
不会吧,用抓图标的软件就可以啊.
更简单的就是用extracticon 取得dll, exe,的图标handle.
然后就将这个handle传递给一个Ticon,saveasfile就可以.
如果是从图标的内部取得包含的bmp 就由点麻烦了.
要先提取icon header only 3 word,其他的bmp头就随在后面.
每个bmp头16个byte,随后就是bmp的data段.取出来,
加上icon的表头就是icon,加上bmp的表头就是bmp,随你怎么
保存,都不会变色了.
去csdn上吧.上面有源码.
 
用图标工具。Delphi自带的不行。
 
还是用第三方的图标工具。
 
实际上,delphi是支持任意颜色的图标的.你自己可以试验一下:写个程序,读入Image1.Picture.Icon.LoadFromFile();读入一个大于16色的图标,显示颜色是正常的.然后保存Image1.Picture.Icon.SaveToFile();到文件,用其它软件打开该图标,颜色也是正常的.所以说,delphi是支持高彩色的.
但是,如果你把它赋给一个TIcon再保存,就只有16位色了.原因很简单.Delphi的Graphics单元有BUG.实际上,它会调用Graphics单元的
procedure WriteIcon(Stream: TStream; Icon: HICON; WriteLength: Boolean);过程.问题就在这里:
...
InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 16);
...
InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 16);

把上面的两个16改成256,然后删除Graphics.dcu,重新编译.即可支持256色了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部