Основы графики
  Немного подумав, я решил объединить 5 разных статей в единое целое, так как для отдельных статей они слишком малы.

Переход в режим 320x200x256

  Этот пример тестировался и был написан специально для Turbo C.
	

void Set13Mode(void){
	union REGS rin,rout;

	rin.x.ax=0x13;
	int86(0x10,&rin,&rout);
}
После вызова этой функции, разрешение экрана составит 320 в ширину, 200 в высоту и 256 в глубину. Под глубиной подразумевается количество цветов. Каждый пиксел может принимать одно из 256 значений, а значит на сохранение данных достаточно одного байта. Адресс начала видео-памяти 0x0A0000000. Так как нижеследующие функции не являются специализированными под вывод графики в режим 320x200x256, а являются универсальными, условно адрес буфера изображения будет обозначен как p_Buffer. Текущий цвет в зависимости от реализации так же может быть представлен как одним байтом так и 4, поэтому я его обозначу как TYPE. Вывод точки на экран

void DrawPixel(int x,int y,TYPE color){
	p_Buffer[y*scr_Width+x]=color;
}
Тут я думаю все должно быть понятно. scr_Width это ширина экрана. Рисование горизонтальной линии Нарисовать горизонтальную линию легче и быстрее вертикальной поэтому ее часто используют для отрисовки графических примитивов.

void DrawHorLine(int x1,int x2,int y,TYPE color){
	if(x1>x2)			// Если x1>x2
		x1^=x2^=x1^=x2;		// То они меняются местами.

	y*=scr_Width;

	for(int i=x1;i<=x2;i++)
		p_Buffer[y+i]=color;
}
Рисование вертикальной линии Алгоритм во многом походит на рисование горизонтальной, но в данном случае изменяется не x, а y.

void DrawVerLine(int y1,int y2,int x,TYPE color){
	if(y1>y2)			// Если y1>y2
		y1^=y2^=y1^=y2;		// То они меняются местами.

	for(int i=y1;i<=y2;i++)
		p_Buffer[i*scr_Width+x]=color;
}
Рисование залитого прямоугольника И в заключении этой статьи пожалуй приведу пример отрисовки залитого прямоугольника

void DrawFillRect(int x1,int y1,int x2,int y2,TYPE color){
	if(x1>x2)			// Если x1>x2
		x1^=x2^=x1^=x2;		// То они меняются местами.

	if(y1>y2)			// Если y1>y2
		y1^=y2^=y1^=y2;		// То они меняются местами.

	for(int j=y1;j<=y2;j++)
		for(int i=x1;i<=x2;i++)
			p_Buffer[j*scr_Width+i]=color;
}
Это основы работы с графикой и представлены базовые алгоритмы, с помощью которых можно реализовывать отрисовку более сложных графических примитивов.
Статью написал faceH0r 13.07.2005
Используются технологии uCoz