IPB
ЛогинПароль:

> Внимание! Действует предмодерация

Подраздел FAQ (ЧАВО, ЧАстые ВОпросы) предназначен для размещения готовых рабочих программ, реализаций алгоритмов. Это нечто вроде справочника, он наполнялся в течение 2000х годов. Ваши вопросы, особенно просьбы решить задачу, не пройдут предмодерацию. Те, кто наполнял раздел, уже не заходят на форум, а с теми, кто на форуме сейчас, лучше начинать общение в других разделах. В частности, решение задач — здесь.

 
 Ответить  Открыть новую тему 
> Графика
сообщение
Сообщение #1


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


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


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

{Программа инициализирует  граф. режим и ждет нажатия клавиши.
код для 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


Прикрепленный файл  svga256.rar ( 4.6 килобайт ) Кол-во скачиваний: 1240

Прикрепленный файл  vesa256.rar ( 3.27 килобайт ) Кол-во скачиваний: 1160


Прикрепленные файлы
Прикрепленный файл  mcga.zip ( 7.95 килобайт ) Кол-во скачиваний: 667


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.10.2020 19:46
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name