nC = C + N - увеличиваем яркость
nC = C - N - уменьшаем яркость
При этом нужно учитывать, что значения канала должны находится в пределах 0 .. 255, поэтому необходимо контролировать выход за эти пределы.
#define CB(i, o, c) o = i + c; o=(o > 255)? 255 :(o < 0) ? 0 : o; i=o;
void ChangeBrightness(TImage * img, int c, float k)
{
int e;
unsigned char * pict;
for (int i = 0; i < img->Picture->Height; i++){
pict = (unsigned char*) img->Picture->Bitmap->ScanLine[i];
for (int j = 0; j < img->Picture->Width; j++){
CB(pict[j*3], e, c);
CB(pict[j*3 + 1], e, c);
CB(pict[j*3 + 2], e, c);
}
}
img->Refresh();
}
Негатив это дополнение значения канала до максимального значения, т.е. C = 255 - C
#define NC(i) i = 255 - i;
void Negativ(TImage *img){
unsigned char * pict;
for (int i = 0; i < img->Picture->Height; i++){
pict = (unsigned char*) img->Picture->Bitmap->ScanLine[i];
for (int j = 0; j < img->Picture->Width; j++){
NC(pict[j*3]);
NC(pict[j*3 + 1]);
NC(pict[j*3 + 2]);
}
}
img->Refresh();
}