Formule pour le réglage de luminosité/contraste sur la Toile?

Comme il y a une formule pour convertir une image en niveaux de gris, est-il une formule pour augmenter la luminosité d'une image et en diminuant dans le même niveau? J'ai essayé d'ajouter une valeur à chacun des r, g et b de pixels. Elle augmente la luminosité, mais lorsque je réduis la même valeur, je n'ai pas ma valeur d'origine de retour.

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;

Ce éclaircit l'image. Mais quand j'réduire de 100 à partir de chaque pixel, je ne reçois pas mon image d'origine en arrière.

J'ai lu sur le web qu'il y a certaines formules pour calculer correctement. Quelqu'un peut-il expliquer? Et de même pour le contraste et le gamma?

Mise à JOUR:

Merci à tous pour les suggestions. J'ai essayé cette après passant par des postes ci-dessous.

Pour augmenter la luminosité de l':

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;

Et pour la réduction de la luminosité:

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;

Je peux voir l'incrément fonctionne bien, mais quand je décrémente, je ne comprends toujours pas l'image d'origine, il y a peu de différence entre l'original et égayé image!

Ce que je fais mal?

Auriez-vous l'esprit de partage de la finale de la formule que vous avez utilisée?

OriginalL'auteur Rutwick Gangurde | 2012-12-18