Как инициализировать графику ?
Вот код для инициализации лучшего из доступных видеорежимов.
Код
{Программа инициализирует граф. режим и ждет нажатия клавиши.
код для 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.
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
svga256.rar ( 4.6 килобайт ) Кол-во скачиваний: 1633
vesa256.rar ( 3.27 килобайт ) Кол-во скачиваний: 1579