Формула для регулировки яркости / контраста на холсте?
Так же, как есть формула для преобразования изображения в оттенки серого, есть ли формула для увеличения яркости изображения и уменьшения его на том же уровне? Я попытался добавить значение для каждого из пикселей r, g и b. Это увеличивает яркость, но когда я уменьшаю то же значение, я неВерни мне мое первоначальное значение.
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;
Это осветляет изображение. Но когда я уменьшаю 100 с каждого пикселя, я неверни мое оригинальное изображение.
Я читал в Интернете, что существуют определенные формулы для правильного расчета. Кто-нибудь может это объяснить? И аналогично для контраста и гаммы?
ОБНОВИТЬ:
Спасибо всем за предложения. Я попробовал это после прохождения некоторых постов ниже.
Для увеличения яркости:
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;
И для уменьшения яркости:
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;
Я вижу, что приращение работает нормально, но когда я уменьшаю его, я все еще нене получить оригинальное изображение, тамНебольшая разница между оригинальным и ярким изображением!
Что я делаю неправильно?