e-mail    Debatní kniha    Mapa stránek    Hlavní  
 perličky 
 

Rychlé nastavování palety na VGA kartě

Vojtěch Semecký

Tento příspěvek poslouží programátorům, kteří se zabývají problémem 256 barev na kartě VGA. Každý, kdo se tímto problémem začne zabývat, zjistí, že pro dosažení dokonalého obrazu (např. při zpracování fotografií) je nutné si pro každý obrázek nastavit jinou paletu barev. Každá barva z palety je tvořena ze tří složek (Red, Green, Blue).

Jisté řešení poskytovala procedura SetRGBcolor z Perličky 256 barev v Turbo Pascalu podruhé, Bajt 5/92. Její nevýhodou však bylo to, že nastavovala pouze jednu barvu najednou. Při potřebě nastavit celou paletu barev, nebo její část, nastávala velká časová ztráta, protože se muselo 256-krát za sebou zavolat přerušení 10h (na mém stroji 386/33 MHz trvalo nastavení celé palety 3 vteřiny). Hledal jsem proto řešení, které by nastavovalo paletu okamžitě, a dospěl jsem k funkci 12h přerušení 10h. Jako vstup pro toto přerušení uložíme do BX číslo první barvy, do CX počet nastavovaných barev (pro celou paletu tedy CX=0 a DX=256). Dále zadáme adresu, na které začíná paleta (do ES segment a do DX offset).

Pro nastavování palety jsem vytvořil jednoduchou proceduru v Pascalu, které dodáte barevnou paletu v podobě pole 256*RGB, číslo první barvy a počet nastavovaných barev.

Doufám, že i toto řešení bude pouze dočasné, protože s příchodem nových karet se 24-bitovými barvami odpadnou i problémy s nastavováním palety.

uses Dos;

type barvy=record
     R,G,B:byte;
     end;
     paleta=array[0..255] of barvy;

procedure SetPalette(var Pal:paleta;prvni:byte;
                     pocet:word);
  { Pro celou paletu Prvni:=0;Pocet:=256
  { POCET musi být typu WORD,
    protože může být v rozsahu 0..256
    a typ BYTE je definován pouze v rozsahu 0..255}

var R:Registers;
begin
    R.AX:=$1012;
    R.BX:=Prvni;
    R.CX:=Pocet;
    R.ES:=Seg(Pal);
    R.DX:=Ofs(Pal);
    Intr($10,R);
end;



Pascal - hlavní
Překladače
Vlastní články
Převzaté články
Věci na stáhnutí
Odkazy k tématu
BP7 buglist
Chyba Run-time 200

BASIC