evg
Рассмотрим алгоритм и реализацию изменения яркости изображения и создания негатива. Для изменения яркости изображения необходимо прибавить/вычесть к значению каждого канала(C) одну и ту же величину(N). Т.е.
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();
}	

Коментарии