CyberPress.Sopron

(http://www.cyberpress.hu/)

Rovat: Dr. Bit

2000. május 02., kedd 00:00


Programozzunk együtt !

A grafikus képernyő elmentése és visszaállítása.

A grafikus képernyő elmentése és 
visszaállítása
Az előzőekben volt példa az egérrel való 
rajzolásra. Ez mind szép és jó, de hogyan tudod
ezt elmenteni? (Feltételezem, hogy tisztában vagy a filekezelés 
alapjaival, hogy hogyan 
lehet irni, illetve olvasni egy fileból. Nem is kell több.) A C és a 
C++ grafikus
módjában van két függvény, ami felhasználható erre: a getpixel(), 
illetva a putpixel().
#include
void far putpixel(int x, int y, int color);
A putpixel egy képpontot(pixelt) rajzol a 
megadott x és y koordinátára, a megadott
szinnel(color).
#include
unsigned far getpixel(x,y);
Az x és az y által meghatározott koordináta helyén lévő képpont 
színével tér vissza.
Hogyan tudjuk ezt felhasználni? 
Mentés:
Nem nehéz: irunk egy 'while' hurkot, ami 
végigmegy a 
képernyőn, miközben eltárolja egy tömbben a koordináták színét, 
amiket ezután 
egyszerűen kimentünk egy fileba. 
Visszaállítás:
Ez sem bonyolult: kiolvassuk a mentett fileból az 
adatokat, tömbbe rendezzük őket,
majd megint egy 'while' hurokkal kirakjuk őket a 'putpixel()' 
függvénnyel.
A megoldást rád bízom, azonban adok néhány 
jótanácsot:
Az tűnhet a legegyszerűbbnek, hogyha egy megadott nagyságban mented 
el a képet,
például minden 10-dik szám után új sor fog következni. Vegyünk 
például egy
egyszerű képet. Ha tudjuk a képről, hogy minden 10 szám egy sort 
jelent, akkor könnyedén
vissza tudjuk rajzolni, csak figyelnunk kell az aktuális pozíciót:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
Ennek van egy hátránya: csak olyan képet tudunk 
kirajzolni, amiről tudjuk, hogy
milyen széles. Ha tehát ilyen programot készítünk, akkor vagy a 
felhasználótól kell bekérni a szélességét, vagy el kell helyeznünk a 
fileba
egy adatot, amiből ezt megtudhatjuk. Egyik sem túl egyszerű: ha a 
felhasználótól
kérdezzük meg, akkor ő bonyolultnak fogja találni a programot, ha a 
fileba helyezzük
el, akkor a programunk lesz összetettebb.
Én egy másik módszert ajánlanék: minden sor végére rakjunk ki egy 
olyan különleges értéket,
amely jelezni fogja a programunk számára, hogy kezdjen új sort. Így a 
file egy kicsit nagyobb
lesz az előzőhöz viszonyítva, de csak annyi bájtttal, ahány soros!
A program így sokkal egyszerűbb lehet, és a legfontosabb: a kép 
méretétől függetlenül
felhasználhatóvá válhat!

1 2 3 4 5 6 7 8 9 10 X
11 12 13 14 15 16 17 18 19 20 X
21 22 23 24 25 26 27 28 29 30 X
31 32 33 34 35 36 37 38 39 40 X
41 42 43 44 45 46 47 48 49 50 X
51 52 53 54 55 56 57 58 59 60 X
61 62 63 64 65 66 67 68 69 70 X
71 72 73 74 75 76 77 78 79 80 X
81 82 83 84 85 86 87 88 89 90 X
91 92 93 94 95 96 97 98 99 100 X
Itt az X-ek (a sárga oszlopban) jelölik az új sor 
kezdetét, de ez lehetne más is!
Hát mostanra ennyit. A következő alkalommal
A grafikus lapok és az animáció kapcsolatáról fogok írni.
 
hpet