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?