Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1267000
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-03-13 10:34:44

求助 Timage.picture.icon颜色失真 Delphi / Windows SDK/API

image1.Picture.Icon.Handle   :=extractIcon(hinstance,   pchar(ParamStr(1)),0);  
  image1.Picture.Icon.SaveToFile(pchar(paramstr(2)))  
   
  保存颜色就变了,怎么办

实际上,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改成65536,然后删除Graphics.dcu,重新编译.即可支持65536色了(XP图标).  
   
   
   
  ------------------------------------------------------- 本回复由大傻的破玩意儿【CSDN's   forum   Explorer】完成! 大傻的破玩意儿,今天你用了木有   !! 软件功能强大,速度超快!!支持中... 软件下载地址:

能不能说得详细点,我不知道这么做  
   
  我用的是vb,只是因为图标的问题才用DELPHI的。InternalGetDIBSizes和InternalGetDIB放在哪??



--------------------------
新闻:中国移动将简化资费套餐至10套以内
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(1310) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~