Wzór do regulacji jasności / kontrastu na płótnie?
Tak jak istnieje formuła do konwersji obrazu na skalę szarości, czy istnieje formuła na zwiększenie jasności obrazu i zmniejszenie go na tym samym poziomie? Próbowałem dodać wartość do każdego z pikseli r, g i b. Zwiększa jasność, ale kiedy zmniejszam tę samą wartość, nie odzyskuję swojej oryginalnej wartości.
var pixels = context.getImageData(...);
//loop over the pixel data and add a value
p[i] = p[i]+100;
p[i+1] = p[i+1]+100;
p[i+2] = p[i+2]+100;
To rozjaśnia obraz. Ale kiedy zmniejszę 100 z każdego piksela, nie odzyskuję oryginalnego obrazu.
Czytam w internecie, że istnieją pewne formuły do prawidłowego obliczenia. Czy ktoś może to wyjaśnić? I podobnie dla kontrastu i gamma?
AKTUALIZACJA:
Dziękuję wszystkim za sugestie. Próbowałem tego po przejrzeniu niektórych postów poniżej.
Aby zwiększyć jasność:
var pixels = context.getImageData(...);
//loop over the pixel data and add a value
p[i] = p[i]+100 < 255 ? p[i]+100 : 255;
p[i+1] = p[i+1]+100 < 255 ? p[i+1]+100 : 255;
p[i+2] = p[i+2]+100 < 255 ? p[i+2]+100 : 255;
I w celu zmniejszenia jasności:
var pixels = context.getImageData(...);
//loop over the pixel data and add a value
p[i] = p[i]-100 >= 0 ? p[i]-100 : 0;
p[i+1] = p[i+1]-100 >= 0 ? p[i+1]-100 : 0;
p[i+2] = p[i+2]+100 >= 0 ? p[i+2]-100 : 0;
Widzę, że przyrost działa dobrze, ale gdy go zmniejszę, nadal nie otrzymam oryginalnego obrazu, jest niewielka różnica między oryginalnym i rozjaśnionym obrazem!
Co ja robię źle?