如何将图标变成灰色
图标需要放到treeview里的node用,而node必须是enable=tree的,所以不用想着enale=false来达到目的了.
图标是从指定窗口的图标句柄动态获得的,所以也不用想着做两张图片了.
需要的图片灰色颜色为enalbe=false时是相同的.
用以设置代表对象的visable=false时的图表状态,而正常时候就用正常图标.
初步设想是用gdi+,但是不太熟悉,而且简单查了下貌似没有直接变成灰度图的功能.
貌似有个矩阵转换啥的,但是不会用.
越简单越好,越快越好,因为是枚举系统窗口列表(包括控件的)所以速度比较重要.
其实这个软件就是要完善spy++
打算增加修改窗体样式功能,当然,这部分获取窗口列表我也打算使用窗口本来的图标.开发完毕为免费软件.希望大家支持下.
请各大神提供思路或者方案.
[解决办法]
/// <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;
}
[解决办法]
改写成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
[解决办法]
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代码好像有点问题。改了一下