2012-01-30 62 views
1

我已经为.NET实现了自定义TreeListView,我想添加Ctrl+X/Ctrl+V功能。如何用较柔和的颜色范围绘制图像?

我想,当用户切一个节点,该节点的图像呈现比平常更柔和,如Windows资源管理器的功能:

enter image description here

有人可以解释如何做到这一点有System.Drawing.Image在C# ?我使用Graphics.DrawImage来绘制图像,所以我需要一个函数来转换图标。

有没有内置算法可以做到这一点?任何示例?

回答

3

您可以在顶部绘制一个部分透明的白色矩形。比重新计算所有像素更容易。

+0

最简单的解决方案永远是最好的。谢谢! – 2012-01-30 16:19:22

0

更改图像的亮度。

我发现一些链接herehere


但是,如果我是你,我将简化它,只是使用我已在外部修改程序做的,而不是不同的图像。

+0

请举个例子吗? – 2012-01-30 15:54:11

+0

@DanielPeñalba请看一下。 – Aliostad 2012-01-30 15:55:34

+0

我无法做到这一点,因为我通过OS加载与扩展相关的图像。 – 2012-01-30 15:58:28

0

查看ColorMatrix类的示例,还有从那里链接的Recoloring Images页面。你应该能够在这里和所有的互联网上找到更多的信息搜索ColorMatrix

请注意,ColorMatrix类在RGBA空间中工作,因此对颜色执行转换以调整亮度和饱和度并不那么简单。在HSV空间中做这种事情通常更容易。在RGBA空间中,您可能最好仅调整Alpha通道(A),以使颜色看起来更暗淡。

如果您只有一小组有限的图标,那么使用您最喜爱的Photoshop克隆手动制作第二组调色图标往往更容易。

3

而不是改变图像的颜色,我只是让图像更透明。您可以使用其他答案中提到的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);