Hlavní navigace

SVGAlib: funkce pro kreslení bodů a přímek

Jakub Matys 10. 9. 2004

Dnes nás už konečně čekají funkce, které dělají grafickým knihovnám jméno. Budou to základní funkce pro kreslení bodů a přímek.

int vga_getxdim(void);
int vga_getydim(void);
int vga_getcolors(vo­id);

Tyto funkce nedělají nic jiného, než že uloží aktuální rozlišení obrazovky, resp. počet zobrazených barev.

int vga_white(void);

V high-color módech je vždy jasné, jakou má bílá hodnotu, v ostatních módech to však nemusí platit. Funkce vga_white tedy vrací hodnotu bílé, ta může být nastavena pomocí vga_setclolor nebo přímo zapsána na obrazovku. Funkce však pracuje pouze s defaultní paletou, pokud používáte nějakou „uživatelskou“ paletu, neporadí si s ní.

A nyní se už podíváme na funkce, které mají co dočinění s kreslením.

int vga_clear(void);

Čistí obrazovku a nastaví všechny viditelné pixely na 0. Pokud voláte funkci vga_setmode, je tato operace provedena automaticky. Funkce vždy vrací 0.

void vga_setcolor(int color);

Jak samotný název napovídá, tato funkce nastavuje aktuální barvu na color. Tuto funkci můžete použít pouze u módů s 256 a méně barvami. Pro jiné módy je lepší použít jednu z následujících dvou funkcí. Tato a obě následující funkce jsou používány funkcemi vga_drawpixel a vga_drawline.

void vga_setrgbcolor(int r, int g, int b);

Nastaví barvu v paletě RGB. Proměnné r, g, b musejí být v rozsahu 0–255. Funkce nebude fungovat v módech s 256 a méně barvami.

void vga_setegacolor(int color);

Tato funkce se snaží nastavit barvy, které se podobají barvám z EGA palety, a pracuje bez ohledu na hloubku daného módu. Platné hodnoty pro barvy:

  • 0 – černá
  • 1 – modrá
  • 2 – zelená
  • 3 – zelenomodrá(cyan)
  • 4 – červená
  • 5 – fialová
  • 6 – hnědá
  • 7 – šedá
  • 8 – temně šedá (světle černá)
  • 9 – světle modrá
  • 10 – světle zelená
  • 11 – světle modrozelená
  • 12 – světle červená
  • 13 – světle fialová
  • 14 – žlutá (světle hnědá)
  • 15 – bílá (světle šedivá)

int vga_drawpixel(int x, int y);

Funkce zobrazí na obrazovce barevný bod(pixel). Barvu musíte nastavit před voláním funkce jednou ze tří předchozích funkcí. Pro „rozlehlejší malování“ se tato funkce nehodí, použitelnější jsou následující tři.

int vga_drawscanli­ne(int line, unsigned char *color);

Nakreslí horizontální přímku přes celou obrazovku na řádek, který se specifikuje parametrem line. Pokud například funkci předáte hodnotu 60, bude napočítán 60. pixel od vrchu obrazovky a na tomto řádku bude nakreslena přímka. Barvy použité při kreslení jsou brány z color[0] až color[length-1].

int vga_drawscanseg­ment(unsigned char *colors, int x, int y, int length);

Tato funkce také nakreslí horizontální přímku, ta však není ohraničena okraji obrazovky. Levý okraj je udán souřadnicemi [x,y], pravý pak délkou přímky length od levého okraje. V high/true-color módech musí být length zadáno v bytech a ne v pixelech. Barvy jsou vybírány viz výše.

int vga_drawline(int x1, int y1, int x2, int y2);

Na rozdíl od výše popsaných funkcí tato nekreslí vodorovné přímky, ale přímky libovolně „posazené“ v rovině. Okraje přímky jsou udávány souřadnicemi [x1,y1] a [x2,y2]. Barva přímky se nastavuje pomocí funkcí vga_setcolor a vga_setrgbcolor. Tato funkce vždy vrací 0.

int vga_getpixel(int x, int y);

Přečte hodnotu jednoho pixelu z obrazovky. Tato funkce není příliš účinná, pokud chcete přečíst více pixelů ležících na řádku za sebou. Pro tyto účely je vhodnější funkce vga_getscansegment.

int vga_getscanseg­ment(unsigned char *colors, int x, int y, int length);

Tato funkce pracuje opačně než vga_drawscanseg­ment. Uloží hodnoty pixelů v řádku ohraničeném souřadnicemi [x,y] a [x, y + length] do pole o velikosti length – 1. A stejně jako u sesterské funkce musí být v high/true-color módech length udáno v bytech.

Tak už tedy umíte „něco“ nakreslit. To, co jsme doposud probrali, jsou jen základy, se kterými však lze vytvářet fungující programy. Příště se si povíme něco keyboard I/O a práci se stránkami.

Našli jste v článku chybu?

10. 9. 2004 18:41

BLEK. (neregistrovaný)

Vypada to tak, ze budes mit pres celou obrazovku pouze to, co si sam nakreslis. Zadne okraje okna, zadne titulni listy, zadny kurzor mysi (ten si musis taky ve svem programu nakreslit).

10. 9. 2004 7:47

heh (neregistrovaný)

chcelo by to nejaky screenshot

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Lupa.cz: Slevové šílenství je tu. Kde nakoupit na Black Friday?

Slevové šílenství je tu. Kde nakoupit na Black Friday?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře