如何将图标变成灰色

無影風 2013-10-31 10:00:14
图标需要放到treeview里的node用,而node必须是enable=tree的,所以不用想着enale=false来达到目的了.
图标是从指定窗口的图标句柄动态获得的,所以也不用想着做两张图片了.
需要的图片灰色颜色为enalbe=false时是相同的.
用以设置代表对象的visable=false时的图表状态,而正常时候就用正常图标.

初步设想是用gdi+,但是不太熟悉,而且简单查了下貌似没有直接变成灰度图的功能.
貌似有个矩阵转换啥的,但是不会用.

越简单越好,越快越好,因为是枚举系统窗口列表(包括控件的)所以速度比较重要.

其实这个软件就是要完善spy++

打算增加修改窗体样式功能,当然,这部分获取窗口列表我也打算使用窗口本来的图标.开发完毕为免费软件.希望大家支持下.

请各大神提供思路或者方案.
...全文
392 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
無影風 2013-10-31
  • 打赏
  • 举报
回复
看了篇文章,三种方法,这是最慢的,读写像素法,但是也对,三分.另外RGB分量为0.299,0.587,0.114
capricciosoft 2013-10-31
  • 打赏
  • 举报
回复
public function ToGray(Bitmap bmp) as Bitmap dim i as integer dim j as integer dim w as integer dim h as integer w= bmp.Width h= bmp.height for(i=0 to w) for(j=0 h) dim color as Color color = bmp.GetPixel(i, j) dim gray as integer gray = color.R * 0.3 + color.G * 0.59 + color.B * 0.11 dim newColor as Color newColor = Color.FromArgb((int)(color.A * .5), gray, gray, gray) bmp.SetPixel(i, j, newColor) next next end function 刚才的VB代码好像有点问题。改了一下
capricciosoft 2013-10-31
  • 打赏
  • 举报
回复
改写成VB的话,大概是这样 public function ToGray(Bitmap bmp) as Bitmap dim i as integer dim n as integer for(i=0 to bmp.Width) for(i=0 to bmp.height) dim color as Color color = bmp.GetPixel(i, j) dim gray as integer gray = color.R * 0.3 + color.G * 0.59 + color.B * 0.11 dim newColor as Color newColor = Color.FromArgb((int)(color.A * .5), gray, gray, gray) bmp.SetPixel(i, j, newColor) next next end function
capricciosoft 2013-10-31
  • 打赏
  • 举报
回复
/// <summary> /// 灰度处理。(对于菜单项图标,透明度还要加倍。) /// </summary> /// <param name="bmp">原始图像。</param> /// <returns>灰度和透明度加倍的图像。</returns> public static Bitmap ToGray(Bitmap bmp) { for (int i = 0; i < bmp.Width; i++) { for (int j = 0; j < bmp.Height; j++) { //获取该点的像素的RGB的颜色。 Color color = bmp.GetPixel(i, j); //利用公式计算灰度值。 int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11); //菜单不可用时,还要将图片的透明度加倍。 Color newColor = Color.FromArgb((int)(color.A * .5), gray, gray, gray); //Color newColor = Color.FromArgb(color.A,gray, gray, gray); bmp.SetPixel(i, j, newColor); } } return bmp; }

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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