Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопрос по Setactivepage и Setvisualpage
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
papasha
Как этим пользоваться, что измиенится и влияет ли это на мерцание?
No matter
Поиском пользуйся... Уже поднимались темы.
Altair
Анимация в Паскале
papasha
Вот ещё вопрос - какая БМП-щка (модуль, а не военный автомобиль!) не изменяет палитру? А то моя БМП так глючит!!! (с книги переписал) - работает )(реново...
GoodWind
если режим 256-цветовой, то необходимо загружать палитру из bmp-файла (причем bmp должен быть 8-битным).

на чем пишете ?

отходим от темы, кстати....
Altair
Цитата(papasha @ 1.03.2006 18:50) *

Вот ещё вопрос - какая БМП-щка (модуль, а не военный автомобиль!) не изменяет палитру? А то моя БМП так глючит!!! (с книги переписал) - работает )(реново...

если не изменять палитру то рисунок будет не "читабелен" взглядом.
так что палитру меняют все модули.
Viator
Если палитру меняют все модули, то как сделать чтобы палитра соответствовала той, что мы в винде видим?
В общем хочу, чтобы БМП открывался НОРМАЛЬНО!!!!!!! Ответа я так нигде и не нашел. Помогите, плиз, курсовую писать надо!!!!
Бравый генерал
Вот процедура вывода BMP-файла:
  Procedure LoadBMP(xx, yy: Integer; FileName: String);
var
fil: File;
g: Byte;
palitra: Array [0..255,0..3] of Byte;
a, b, x, y, a0: LongInt;
c: Array [1..1024] of Byte;
begin
Assign(fil,FileName);
ReSet(fil,1);

Seek(fil,$12);
BlockRead(fil,a,4); {считываем ширину картинки}
BlockRead(fil,b,4); {... высоту ...}
a:=a + ((4 - (a mod 4)) mod 4); {не знаю почему но с этой формулой все работает,
а без нее не всегда. Мистика.}

Seek(fil,$35);
BlockRead(fil,palitra,SizeOf(palitra)); {считываем палитру}
BlockRead(fil, g, 1);

for x:=0 to 255
do SetRGBPal(x, palitra[x,3] shr 2, palitra[x,2] shr 2, palitra[x,1] shr 2); {изменяем текущую палитру}
for y:=b downto 1 {выводим картинку}
do begin
BlockRead(fil,c,a);
for x:=0 to a
do if y <= GetMaxY
then PutPixel(x+xx-1, y+yy-1, c[x])
end;
Close(fil)
end; {LoadBMP}


С видеостраницами, как я уже говорил, работать вот так:

Var
v: Byte;

...

v:=0;
SetVisualPage(0);
REPEAT
Inc(v);
if v > 5
then v:=0;
SetActivePage(v);

ClearDevice;
{рисуем все что надо}
SetVisualPage(v)
UNTIL KeyPressed;


V можно увеличивать и до 1, а не до 5, но тогда изображение часто мелькает (TP7, VESA256), не знаю с чем это связано, так что 5 - самое то))).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.