2012-01-30 42 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);