delphi TIcon保存ico文件时失真的解决办法


本文整理自网络,侵删。

 

提取exe文件中的图标并保存为ico文件:
ico := TIcon.Create;
try
  ico.handle := ExtractIcon(hInstance, ExeFileName, 0);
  ico.SaveToFile(''c:\001.ico'');
finally
  ico.free;
end;
保 存后的001.ico文件严重失真,我们打开Graphics.pas文件,找到writeIcon函数,在这个函数里有这样一行代码:
InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 16);
InternalGetDIBSizes函数的原型是这样声明的:
procedure InternalGetDIBSizes(Bitmap: HBITMAP; var InfoHeaderSize: DWORD; var ImageSize: DWORD; Colors: Integer);
我们可以看出最后一个参数指要保存的图标的颜色数,在 writeIcon函数中指定为16,也就是说保存为16位色,现在的图标都是32位真彩色,难怪会失真了。
我们把那行代码改成:
InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 65536);
当然还有下面一行
InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 16);
也要改成
InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 65536);
我们将改过后的Graphics.pas文件保存到当前工程目录下面, 然后重新编译程序,再次运行,图标就不会失真了

相关阅读 >>

Delphi xe5 android 调用手机震动

Delphi 手机app打开一个安卓系统支持的文件,比如 pdf

Delphi 截屏函数(包含截取鼠标形状)

Delphi 判断一个颜色是否是亮色

Delphi pos的用法

Delphi for xx in xx do 语法的使用示例

Delphi 跳出循环的几种方法

Delphi 2009 新增单元 character isletter、isupper、islower、isdigit、isnumber

Delphi richedit的实现msn / qq 中的动画表情

Delphi 存储过程与函数的区别

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...