Графика в Паскале.


Как инициализировать графику ?
Вот код для инициализации лучшего из доступных видеорежимов.
Код

{Программа инициализирует  граф. режим и ждет нажатия клавиши.
код для TP7, BP7, BPW, FPC}
Uses
Graph,
Crt;
Var
gd,gm:integer;
Begin
gd:=detect;
InitGraph(gd,gm,'');
readkey
end.

Инициализируется режим 16 цветов, разрешением 640x480.

Если Вы желаете большего, необходимо использовать уже нестандартные драйвера.
Например SVGA256 или VESA256. Остановимся на последнем.

VESA 256 цветов (8bit).
Есть 2 способа установить данный видеорежим.
1 способ - подключить bgi драйвер.
вот так:
Код

Uses Graph,CRT;
Var
dg,gm:Integer;
Begin
gd:=InstallUserDriver('vesa256',nil);
gm:=3; {mode = 0-4}
initgraph(gd,gm,'');
readkey;
end.

Инициализируется режим 8bit (256 цветов) 1024x768.

2 способ. Использовать специальную библиотеку.
Вот пример для библиотеки VESA256, написанной Dark'om.

скачать архив с модулем

Функции, доступные, при подключении модулей vesa256, vesatype;
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Function TestMode(mode:word):boolean;
Возвращает истину если видеорежим mode доступен.
Procedure VSetMode(mode:word);
Устанавливает VESA режим.
procedure VClrScr(col:byte);
Очистка экрана
procedure VPutPixel(x,y:word;col:byte);
Рисование точки (x,y) уветов col.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Это основа для творчества в VESA 8bit режиме.
КОнечно вывод линий, окружностей, и проч., необходимо реализовывать
самостоятельно с помощью алгоритмов брезенхейма.
Пример: (вывод 256 цветной радуги в VESA режиме.)
Код
uses crt,vesa256,vesatype;
var
i,j:byte;
begin
VSetMode($101);
for i:=1 to 255 do for j:=1 to 100 do vputpixel(i,j,i);
readkey
end.


Одним из недостатков этого режма - недоступность мыши. То есть
мышь конечно рабоатет, но указатьель не отображается на экране, и
по умолчанию указатель может перемещаться только в 0-ом окне VESA.
Есть 2 решения это проблеммы - написать свой драйвер или эмулировать в программе
вывод курсора картинкой.


режим 13h

Самый известный графический режим для ДОСа - под номером 13h
mode 13h - MCGA (VGA) 320x200x256 (8-битный цвет)
видеопамять проецируется на ОЗУ одной страницей в 64000 байт,
т.е. целиком умещается в один сегмент! и даже в реальном режиме
процессора весь экран доступен без переключения страниц !!!

Вывод точки в режиме 13h.
Код

procedure putpixel(x,y: integer; c: byte);
begin
mem[$A000:y*320+x]:=c;
end;


где $A000 - адрес сегмента ОЗУ, в который проецируется видеопамять
в графических режимах VGA (CGA и EGA вроде с $B000),
к слову: в текстовом режиме видеопамять доступна с адреса $B800...
Включение режма:
Код

procedure setmode(mode: byte); assembler;
asm
mov  ah,0; //команда (0-установка видеорежима)
mov  al,mode;
int  10h;  //видео-служба BIOSа
end;


Библиотеки для работы с 13h режимом:
xvga


Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла