ColorMatrix - jak to działa?

0

Napisałem sobie prostą aplikację do przetestowania do czego służą poszczególne elementy macierzy ColorMatrix ale dalej troche trudno jest mi się połapać.

user image

Mógłby ktoś mi powiedzieć jak rozumieć co robią poszczególne rzędy? Oczywiście bawiłem się w napisanym przez siebie programie, ale z tego poza uzyskaniem koloru szarości i zbytnim przekolorowaniem (na czuja) nie udało mi się tego ogarnąć.

Tzn wiem że zerowy rząd - R, pierwszy - G, drugi - B , trzeci - A, i to samo z kolumnami ale chcialbym to w pelni zrozumieć by np napisać kod do suwaka nasycenia itd.

1

Jak chcesz zmienić nasycenie to nie operuj na RGB, tylko skonwertuj je sobie na HSL albo HSV i zmieniaj saturację (czyli nasycenie).

Poszczególne kolumny również oznaczają RGBA(w). Jeżeli chcesz, żeby wpływ na jeden kolor miał drugi kolor to jedno z tych zer zamieniasz na coś innego.

0

Mam pytanie w kwestii tej konwersji. Bo ColorMatrix pozwala zmienić cały obrazek kolorystycznie. A nawet jak uzyskam sobie z koloru Hue, Saturation i Brightness, poprzestawiam, i użyje podobnej funkcji do tej z http://stackoverflow.com/questions/4106363/converting-rgb-to-hsb-colors , to i tak dotyczyć to będzie jednego koloru. A co zrobić by zmienić cały obrazek, nie idąc for'em po pikselach?

3

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.
CodeCogsEqn.png
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:
CodeCogsEqn1.png
Zatem macierzą takiego przekształcenia będzie:
CodeCogsEqn2.png
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:
CodeCogsEqn3.png

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1