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


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

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

Репутация: -  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 вопрос - ПРИ ЗАМЕНЕ ПАЛИТРЫ, все на экране меняет цвет!


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





Группа: Пользователи
Сообщений: 9

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


Вот пришел задать вопрос и увидел, что такой уже есть. Объясните пожалуйста как вообоще создавать свои цвета, а затем с ними работать. Сидел с книжками часа 2 - все равно ничего непонял. Тут что-то про 256-цветный режим Oleg_Z говорит. А какой режим у паскаля основной?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


Цитата
А какой режим у паскаля основной?

Что значит основной?
Все зависит от драйвера.
Т.к. в комплект поставки TP входит EGAVGA.BGI, то обычно используют его.
Но он максимум может дать 640*480 и 16 цветов.
А если использовать сторонние драйвера, то можно до 1024*768 256 цв. (а можно и больше наверное цветов)


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





Группа: Пользователи
Сообщений: 9

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


Oleg_Z
Так если у меня стоит этот EGAVGA.BGI то создание иных цветов кроме основных 16 мне не светит? Так чтоли?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


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

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

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


Если вы будете работать только с ним, то да.
Но можно скачать из инета VASE256.BGI или SVGA256.BGI и тогда будет доступен 256 цв. режим.
Можно с тестового форума это скачать!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 разве чтоsmile.gif)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


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

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

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


Цитата
потом принесу свой модуль, если кому надо

Это замечательно!


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


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Знаток
****

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

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


На тему режимов

Сторонними драйверами не люблю пользоваться, пишу свой =) для работы с VESA графикой, на паскале-асме, в общем то он рабочий, надо тока его доработать, тогда - там возможны будут все режимы, предоставляемые VESA графикой - кому интересно - скажите


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


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

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

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


Мне интересно, если будет время и желание, пожалуйста отправьте на
мой ящик


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

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

 





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