谁知道如何从彩色图标得到黑图标?

lzzqqq 2005-09-21 09:09:15
有一组彩色图标.用CImageList加载后,然后用ExtractIcon可以得到图标.
不过图标都是彩色的.有什么办法把彩色图标变成黑白的吗?(我需要用彩色/黑白表示在线和不在线状态)
当然可以做一组黑白图标,但那样的话太浪费资源.不是我所希望的.
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuchi 2005-09-21
  • 打赏
  • 举报
回复
你可以构造一个单色的CImageList,这样会把彩色图标显示成黑白色,好像是构建CImageList的时候设置一个参数
booklove 2005-09-21
  • 打赏
  • 举报
回复
那个是无效状态,自己要实现可能只有重画了。还不如再做一组图标方便。
你看看这个。
http://community.csdn.net/Expert/topic/4282/4282425.xml?temp=.8008844
lzzqqq 2005-09-21
  • 打赏
  • 举报
回复
答非所问啊....
看来二位公子还不理解我的意思啊.
你可以用VC向导生成一个MDI工程,里面没有黑白图标资源,但工具栏上的图标照样可以显示成黑白状态的...
saliors 2005-09-21
  • 打赏
  • 举报
回复
QQ也是另作一组黑白图标的呢。
假如真的不愿意用另一组图标的话,可以对彩色图像作灰度变换来实现。
nkwesley 2005-09-21
  • 打赏
  • 举报
回复
再做一组单色的CImageList,加载同样的资源
phoenix96_2000 2005-09-21
  • 打赏
  • 举报
回复
codeproject 有个grayscale的类,把HICON 转为灰度的HICON,应该就是你想要的功能

http://www.codeproject.com/bitmap/creategrayscaleicon.asp
  VB6本身只支持16色(4位)和256色(8位)的图标,这种图标只是早期的Windows版本所采用的 图标格式标准。现在各种高清真彩色(32位带Alpha通道、24位不带Alpha通道)早已经很流行 并且普遍使用了,但在VB6中却不能直接支持、使用。即使想把这种真彩色图标加入图标资源、 或者是把它加入ImageList控件中,也会被提示“无效图片”而不能加入。记得论坛中曾经有某 位高人说过,VB6的Form是支持真彩色图标的,可以给窗体设置真彩色图标。   昨天上午我试了一下,新建一个标准EXE工程,然后随意找了一个高清真彩图标文件,给工 程的Form1设置Icon属性,成功了……… 但是,感觉它显示的图标有点怪异,总觉得有些不对 劲呢…… 于是,我把这个高清图标文件中32×32和16×16这两种规格的真彩色图标单独提取 出来,分别保存为一个.ico格式的文件,然后再用这两个图标文件来给它设置Icon属性。果然, 这两个文件在操作时VB6都提示“无效图片”!!!这就说明:VB6是不支持真彩色图标的。最 开始时“能设置成功”,只不过是因为它从图标组中找到了256色的、它能支持的格式罢了。   闲话不多说了,这个模块进行了简单的封装,提供了一些基础的操作功能。源码中有比较 详细的注释,使用起来应该是很简单的,就不再写什么“应用示例代码”了。首先要调用接口 函数装载图标,从图标文件加载就调用LoadFromFile(),从字节数组加载就调用LoadData()。 加载成功后,即可调用其它接口来使用图标对象了,比如用GDI方式把图标画到窗口内、或者画 到某个PictureBox上、给自己的窗口或别的程序窗口设置一个真彩色图标等。虽然在“资源” 中不能以“图标”的方式把真彩图标加入,但是,却可以按“自定义资源”的方式把图标文件 装入,使用时读取出对应的资源数据,然后调用函数LoadFromData()进行加载。加载成功就可 以使用里面的真彩色图标了。   这个模块只提供了一些基本的功能,如果有需要可以自己再进行扩展。还有就是没有进行 异常处理,因此要求用来加载的文件必须是正确的图标文件、并且可以读取;数组数据则必须 是合法的图标文件数据。否则可能会引起异常,你也可以修改代码进行异常捕获处理。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧