Hlavní navigace

SVGAlib (17)

Jakub Matys

V dnešním dílu se naučíme pracovat s pix- a bitmapami a povíme si něco o funkcích pracujících s uživatelskými paletami barev.

void gl_getbox (int x, int y, int w, int h, void *dp);

Kopíruje pravoúhlou oblast, která leží na pozici x, y s rozměry w x h z obrazovky do bufferu dp. Pixmapy jsou uloženy po řádcích. Velikost cílových dat je rovna w * h * BYTEPERPIXEL.

void gl_copybox (int x1, int y1, int w, int h, int x2, int y2);

Kopíruje obdélníkovou oblast o rozměrech w x h ze souřadnic x1, y1 na pozici x2, y2.

void gl_copyboxtocontext (int x1, y1, int w, int h, GraphicsContext *gc, int x2, int y2);

Kopíruje obdélník o rozměrech w x h z pozice x1, y1 na x2, y2 v kontextu gc.

void gl_copyboxfrom­context (GraphicsContext *gc, int x1, int y1, int w, int h, int x2, int y2);

Funguje obdobně jako funkce výše, ale opačně. Obdélník je zkopírován z kontextu gc a je uložen v aktuálním kontextu na pozici x2, y2.

void gl_putbox (int x, int y, int w, int h, void *dp);

Kopíruje obsah bufferu dp do pravoúhlé oblasti na pozici x,y, přičemž velikost obdélníku je w x h. Pixmapy jsou v bufferu uloženy po řádcích a velikost bufferu musí být w * h * BYTEPERPIXEL.

void gl_putboxpart (int x, int y, int w, int h, int bw, int bh, void *dp, int xo, yo);

Kopíruje obsah paměti bufferu dp jako bitmapu na pozici x, y při velikosti w x h. Z paměti je však zkopírována pouze část dat. Ta začíná na offsetu xo, yo a její velikost je bw x bh.

void gl_putboxmask (int x, int y, int w, int h, void *dp);

Kopíruje obsah bufferu dp do pravoúhlé oblasti o velikosti w x h na pozici x, y. Tato funkce pracuje obdobně jako gl_putbox, ale nezapisuje pixmapové pixely s barvou 0. Jestliže je nějaká pixmapa používána častěji, je vhodné uvažovat o použití rychlejší funkce gl_putboxmaskcom­piled.

void gl_putboxmaskcom­piled (int x, int y, int w, int h, void *dp);

Kopíruje obsah bufferu dp do obdélníkové bitmapy o velikosti w x h ležící na pozici x, y.

void gl_compileboxmask (int w, int h, void *sdp, void *ddp);

Konvertuje obdélník maskované bitmapy o velikosti w x h, který leží na adrese sdp, do komprimovaného formátu a uloží jej na adresu ddp. Kompilovaný formát umožňuje rychlejší kreslení maskovaných bitmap. Na alokaci paměti by obyčejně mělo stačit w * h bytů, horní hranicí by mělo být (w + 2) * h bytů.

int gl_compiledbox­masksize (int w, int h, void *sdp);

Funkce vrací velikost kompilované verze makované bitmapy o velikosti w x h, která leží na adrese sdp.

void gl_getpalette­color(int c, int *r, int *g, int *b);
void gl_getpalette­colors(int s, int n, void *dp);
void gl_getpalette(vo­id *dp);

gl_getpalettecolor
obdrží hodnoty červené, zelené a modré (v rozmezí 0 – 63) z barvy c, poté je uloží jako celá čísla na ukazatele r, g a b.
gl_getpalettecolors
obdrží RGB hodnoty n barev začínajících na pozici s, které poté uloží do vícerozměrného pole (vždy po skupinách třech bytů na jednu barvu).
gl_getpalette
je ekvivalentem k funkci gl_getpalette­colors(0, 256, dp).

void gl_setpalette­color(int c, int r, int g, int b);
void gl_setpalette­colors(int s, int n, void *sp);
void gl_setpalette(vo­id *sp);

gl_setpalettecolor
nastaví RGB hodnoty (v rozsahu 0 – 63) barvy c.
gl_setpalettecolors
nastaví RGB hodnoty n barev začínajících na pozici s, které jsou uloženy na adrese sp (po skupinách třech bytů na jednu barvu).
gl_setpalette
je ekvivalentem k funkci gl_setpalette­colors(0, 256, sp).

void gl_setrgbpalet­te(void);

Nastaví 256barevnou RGB paletu (bity 0–2 modrá, 3–5 zelená, 6–7 červená). Funkci volejte před použitím gl_getpixelrgb, gl_rgbcolor, gl_setpixelrgb v 256 barvách.

Příště nás čeká poslední díl. Povíme si něco o kreslení trojúhelníků ;o)

Našli jste v článku chybu?
25. 2. 2005 15:34
Pokud pocitate uspech clanku podle toho, kolik na nej prijde komentaru ve zneni "tohle je prisernej clanek, proc to root vydaval", pocitate spatne. Tento clanek je typickym prikladem clanku, ktery sice zrovna nepotrebuju (a proto ani nereaguju komentarem), ale pokladam za dost pravdepodobne, ze se mi bude hodit pozdeji. Oproti tomu vas clanek (setrvani-na-windows-neunosne-nakladne) si prectu jen proto, abych nebyl v diskuzi za blbce, pote se kdyz mam zrovna cas a naladu pustim do flam…
25. 2. 2005 7:47
Kdyz jsem se pokusil napsat svůj článek, snesla se na mne vlna kritiky jak je to o ničem, neprofesionální atd. (a to je druhý nejčtenejši a má 95 komentářu). Bez urážky, myslím si, že o ničem jsou zejména tyto nácté pokračování opisů manuálu, které Rootem projedou jako nůž máslem (bez povšimnutí, komentářů)