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

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> работа с палитрой в графическом режиме, Как менять палитру в 256 цв. режиме?
сообщение
Сообщение #1


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

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

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


У меня вот появилось 2 вопроса:
1) Как менять палитру в 256 цв. режиме (процедура setallpalette -не работает в 256 цв.)
2) При замене палитры в 256 цв. режиме, то, что уже на экран выведенно, будет замененно на новые цвета, или только индексы цветов поменяются?
Если у кого есть идеи, подскажите пожалуйста.


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


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

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


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

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;

вызываем setmode($13) для переключения туда и setmode(3) обратно в текстовый (перед выходом)
это необходимый минимум для работы с графикой, и никаких модулей Graph подключать не нужно (он и не будет работать)
потом принесу свой модуль, если кому надо, там и с палитрой работа есть (причем даже в текстовом режиме палитру можно менять, и в любых графических, кроме 3х-цветного CGA разве чтоsmile.gif)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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