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