我已經爲.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