我已经为.NET实现了自定义TreeListView
,我想添加Ctrl+X/Ctrl+V
功能。如何用较柔和的颜色范围绘制图像?
我想,当用户切一个节点,该节点的图像呈现比平常更柔和,如Windows资源管理器的功能:
有人可以解释如何做到这一点有System.Drawing.Image
在C# ?我使用Graphics.DrawImage
来绘制图像,所以我需要一个函数来转换图标。
有没有内置算法可以做到这一点?任何示例?
我已经为.NET实现了自定义TreeListView
,我想添加Ctrl+X/Ctrl+V
功能。如何用较柔和的颜色范围绘制图像?
我想,当用户切一个节点,该节点的图像呈现比平常更柔和,如Windows资源管理器的功能:
有人可以解释如何做到这一点有System.Drawing.Image
在C# ?我使用Graphics.DrawImage
来绘制图像,所以我需要一个函数来转换图标。
有没有内置算法可以做到这一点?任何示例?
您可以在顶部绘制一个部分透明的白色矩形。比重新计算所有像素更容易。
查看ColorMatrix类的示例,还有从那里链接的Recoloring Images页面。你应该能够在这里和所有的互联网上找到更多的信息搜索ColorMatrix
。
请注意,ColorMatrix
类在RGBA空间中工作,因此对颜色执行转换以调整亮度和饱和度并不那么简单。在HSV空间中做这种事情通常更容易。在RGBA空间中,您可能最好仅调整Alpha通道(A),以使颜色看起来更暗淡。
如果您只有一小组有限的图标,那么使用您最喜爱的Photoshop克隆手动制作第二组调色图标往往更容易。
而不是改变图像的颜色,我只是让图像更透明。您可以使用其他答案中提到的ColorMatrix,其矩阵使得alpha通道50%左右。
float[][] colorMatrixElements = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 0.5f, 0}, // alpha scaling factor of 50%
new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
最简单的解决方案永远是最好的。谢谢! – 2012-01-30 16:19:22