работа с палитрой в графическом режиме, Как менять палитру в 256 цв. режиме? |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
работа с палитрой в графическом режиме, Как менять палитру в 256 цв. режиме? |
Altair |
10.04.2004 13:45
Сообщение
#1
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
У меня вот появилось 2 вопроса:
1) Как менять палитру в 256 цв. режиме (процедура setallpalette -не работает в 256 цв.) 2) При замене палитры в 256 цв. режиме, то, что уже на экран выведенно, будет замененно на новые цвета, или только индексы цветов поменяются? Если у кого есть идеи, подскажите пожалуйста. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
11.04.2004 19:06
Сообщение
#2
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Да...
Есть стандартная процедура setRGBPalette. А вот модернизированная: Код procedure set256palette(var rgb_buffer);{Sets 256 color palette} begin with regs do begin ax :=$1012; bx :=0; cx :=256; es :=seg(rgb_buffer); dx :=ofs(rgb_buffer); intr($10,regs); end; end; rgb_buffer - перед вызовом процедуры, надо сформировать массив : array[0..255] of record color,r,g,b :byte end; у меня остался один вопрос: а как получить палитру для каждого цвета (или сразу весь массив ) ? Стандартная процедура не работает в 256 цветном режиме! (GetPalette) ------ Вот в интернете нашел что: поцедура получения палитры для цвета Код Procedure GetPal(ColorNo : Byte; Var R,G,B : Byte); { This reads the values of the Red, Green and Blue values of a certain color and returns them to you. } Begin Port[$3C7] := ColorNo; R := Port[$3C8];{You can put in all of numbers $3C8 number $3C9 and then it will get palette with maximum 63 digits each color} G := Port[$3C8]; {I can't find Port, to read color palette} B := Port[$3C8]; {Thats the Port of 8 bit grayscale!} End; {If You know, wich port is the right to read all palette with all its colors, E-Mail me and send this Port number - PLEASE!} Но все было бы хорошо, если бы она работала! Я ее так тестировал: Вывожу все 256 цветов в линию (получаю "радугу") Пробую для всех цветов получить палитру, получаю, что r=g=b=color+1; Вывожу BMP рисунок (с функцией замены палитры) Пробую заменить палитру на r=g=b=color+1; Снова вывожу радугу Получаю вместо цветной радуги - черно-белую! У кого-нибудь есть идеи? ------ Зато сразу получаю ответ на 2 вопрос - ПРИ ЗАМЕНЕ ПАЛИТРЫ, все на экране меняет цвет! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
ДенисС |
13.04.2004 6:19
Сообщение
#3
|
Группа: Пользователи Сообщений: 9 Репутация: 0 |
Вот пришел задать вопрос и увидел, что такой уже есть. Объясните пожалуйста как вообоще создавать свои цвета, а затем с ними работать. Сидел с книжками часа 2 - все равно ничего непонял. Тут что-то про 256-цветный режим Oleg_Z говорит. А какой режим у паскаля основной?
|
Altair |
13.04.2004 6:25
Сообщение
#4
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата А какой режим у паскаля основной? Что значит основной? Все зависит от драйвера. Т.к. в комплект поставки TP входит EGAVGA.BGI, то обычно используют его. Но он максимум может дать 640*480 и 16 цветов. А если использовать сторонние драйвера, то можно до 1024*768 256 цв. (а можно и больше наверное цветов) -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
ДенисС |
13.04.2004 14:58
Сообщение
#5
|
Группа: Пользователи Сообщений: 9 Репутация: 0 |
Oleg_Z
Так если у меня стоит этот EGAVGA.BGI то создание иных цветов кроме основных 16 мне не светит? Так чтоли? |
Altair |
13.04.2004 15:22
Сообщение
#6
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Если вы будете работать только с ним, то да.
Но можно скачать из инета VASE256.BGI или SVGA256.BGI и тогда будет доступен 256 цв. режим. Можно с тестового форума это скачать! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
P@sh@ |
14.04.2004 10:11
Сообщение
#7
|
Бывалый Группа: Пользователи Сообщений: 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 разве что) |
Altair |
14.04.2004 14:15
Сообщение
#8
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата потом принесу свой модуль, если кому надо Это замечательно! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Dark |
23.04.2004 7:00
Сообщение
#9
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Могу свой дать - с VESA 256 цветов, тока его сильно дорабатывать надо
Вот что у мя написано в книге: В состав прерывания BIOS int 10h входит группа обработки палитры запрос 1010 - установить один регистр запрос 1015 - получить один регистр запрос 1012 - установить группу регистров запрос 1017 - получить группу регистров запрос записывается в регистр ax 1010h: в bx - номер регистра dh,ch,cl - RGB ничего не возвращает 1015h: в bx - номер регистра возвращает : dh,ch,cl - RGB 1012h: в bx - номер регистра c которого начать запись cx - колво записываемых регистров es:dx - адрес массива цветов откуда записать в палитру 1017h: в bx - номер регистра c которого начать копирование cx - колво копируемых регистров es:dx - адрес массива цветов куда записать размером 3*N где N - колво регистров, указанное в cx -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
24.04.2004 5:00
Сообщение
#10
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
На тему режимов
Сторонними драйверами не люблю пользоваться, пишу свой =) для работы с VESA графикой, на паскале-асме, в общем то он рабочий, надо тока его доработать, тогда - там возможны будут все режимы, предоставляемые VESA графикой - кому интересно - скажите -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Altair |
24.04.2004 7:23
Сообщение
#11
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Мне интересно, если будет время и желание, пожалуйста отправьте на
мой ящик -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Текстовая версия | 27.04.2024 19:00 |