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 A putpixel egy képpontot(pixelt) rajzol a megadott x és y koordinátára, a megadott szinnel(color). #include 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:
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!
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 |