2011-02-03 129 views
3

我有一個包含一些隨機位圖數據的「位圖」類型。我已經針對亮度,顏色,飽和度和色調自己編寫了自己的調整,這些調整分別針對每一位進行,而且毫不奇怪,這種調整非常緩慢。如何在.NET中使用ColorMatrix來更改亮度,顏色,飽和度,色調

在我的研究中,我發現使用矩陣可以非常快地調整這些。另外,.NET有一個ColorMatrix,你可以在DrawImage()中應用矩陣效果。

我們建立如下所示(從MSDN網站)的矩陣:

float[][] colorMatrixElements = { 
new float[] {2, 0, 0, 0, 0},  // red scaling factor of 2 
new float[] {0, 1, 0, 0, 0},  // green scaling factor of 1 
new float[] {0, 0, 1, 0, 0},  // blue scaling factor of 1 
new float[] {0, 0, 0, 1, 0},  // alpha scaling factor of 1 
new float[] {.2f, .2f, .2f, 0, 1}}; // three translations of 0.2 

但我一直沒能找到合適的範圍或究竟這些數字的任何實際做。我不知道如何調整亮度,顏色,飽和度和色調。

任何幫助?我在某處丟失了一些很好的文檔嗎?

謝謝!

+0

最後一行是'亮度'。目前,我只是將它全部設置爲亮度。 (範圍0-> 1) – DanTheMan 2011-02-03 17:12:16

回答

4

http://www.graficaobscura.com/matrix/index.html有一些細節,但你可能想發佈你的其他代碼。每像素執行操作非常普遍,您通常不會遇到此類操作的性能問題。 .NET的Bitmap.SetPixel非常慢。代碼項目中有一個很好的C# image processing series,顯示了更快的方法。我沒有使用C++ -cli的經驗,但我會看看。

+0

感謝您的參考。我設法做了比我想象的更多的使用矩陣。唯一(必不可少的)是'對比',但C#示例解決了這個問題。我做了一些測試,是的,它主要是'SetPixel',速度很慢。幾千次這樣做_really_減慢了代碼! – DanTheMan 2011-02-13 18:18:42

1

對顏色矩陣可以做什麼有限制。

基本上,您提供的矩陣實際上是一個同質四維變換。這是一個很大的詞,這意味着你可以旋轉,縮放,翻譯你的顏色的不同頻道(R G B A)。

查看Transformation Matrix瞭解更多詳情。

+0

亮度對應於縮放,而色調的改變對應於旋轉。飽和度對應於相對於遠離原點的縮放,我相信,這也可以表示爲縮放,然後是平移。 – 2011-02-03 23:52:22

相關問題