ColorMatrix pozwala na zamianę poszczególnych wartości R,G,B,A na podstawie ich pierwotnych wartości. Matematyczniej mówiąc - na podstawie ich kombinacji liniowej.
Powyżej zaprezentowałem równanie macierzowe opisujące tą zależność oraz rozpisałem je na poszczególne równania. Jak widać docelowa składowa koloru (np. r') jest sumą bazowych wartości (r,g,b,a) przemnożonych przez zadane współczynniki. Zbiór wszystkich współczynników to właśnie ColorMatrix.
Dla przykładu jeśli chcielibyśmy przyciemnić kolor (zmniejszyć "brightness") o 50% to musimy każdą ze składowych r/g/b podzielić przez 2:
Zatem macierzą takiego przekształcenia będzie:
Tu z kolei pokazano jak zmienić inne rzeczy jak saturację czy HUE:
http://www.graficaobscura.com/matrix/index.html
Ostatni wiersz i ostatnia kolumna są szczególne. Współczynniki c40,c41,c42,c43 zawsze muszą być 0, a współczynnik c44 zawsze 1. Natomiast współczynniki c04,c14,c24,c34 to "wyrazy wolne", wartości które należy dodać do wyniku niezależnie od pierwotnych wartości RGBA. Te wszystkie "sztywne" zera i jedynki są tylko po to aby ułatwić obliczenia. Równanie macierzowe można by zapisać bez nich, ale zamiast jednego mnożenia przez macierz mielibyśmy mnożenie i dodawanie:
Co do masowej zmiany koloru to odsyłam na MSDN:
http://msdn.microsoft.com/en-us/library/system.drawing.imaging.colormatrix.aspx
Jest wszystko wyjaśnione i przykład dany.
ColorMatrix to łatwy i wydajny sposób manipulowania kolorem.