[ARHIIV] mängumeistrid
Pole sisse logitud. [Logi sisse ]
Mine lehekülje algusesse
Prinditav versioon | Telli teema e-mailile | Lisa lemmikutesse  
pildi scalemine
Pix
Level 3
Avatar

Liitunud: 23.2.2009
Postitusi: 46
[EEMAL]




postitati 4.9.2009 17:56 Tsiteeri
pildi scalemine



selline lugu siis:

Sisse laetud pildid peaksid kõik olema võrdsed või väiksemad kui ütleme nt 800x600. Neid saaks valemi abil hoida kogu aja scaletuna (image_xscale & image_yscale). kuid siis nad mahuvad küll ekraanile, kuid sisaldavad siiski sama palju infot kui enne scalemist ja seega aeglustavad mängu. proovisin surfacile joonistamist ja sealt pärast sprite uuesti võtmist. kuid kui neid oli mitu tükki või lihtsalt suvalisel juhul (ühesõnaga põhjus pole teada) läks midagi valesti ning pildid tulid imelikult. täpsemalt pildi paremast ja alumisest servast oleks nagu osa ära lõigatud ning olemasoleva pildi serva pikslid venitati äärteni e pildi õigete servadeni.

Kas on mingi muu võimalus ka pilt väiksemaks teha ning spritena salvestada? kas asi võib olla lihtsalt selles, et kõigi nende piltide sisse laadimine (neid on palju, kasvõi 80+) ning vahepeal suuremate surfacitele joonistamine, siis scalemine ning surfacilt uuesti sprite laadimine teeb arvuti nii aeglaseks et need asjad juhtuvad? vb salvestab surfacilt kuid tegelikult pole pilt veel korralikult scaletud?

väge keeruline värk ;) kui ei saa aru küsige, ma täpsustan.

P.S. tegemist on nö galeriiga.

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
Crypton

Avatar

Liitunud: 18.12.2005
Postitusi: 1604
[EEMAL]




postitati 4.9.2009 18:09 Tsiteeri


surface-dega tegelemine on mõneti aeglane. Ütleks, et pildi loomine võib olla mõneti aeglane kuid tähtis on, et eelnevad pildid, mida ei kasutata, eemaldada mälust.
Seda asja saab reaalajas väga hästi majandada aga jh eelnevad pildid vaja eemaldada, et anda ruumi uute jaoks.

Praktikas siis kasutada mingit surface_free() funktsioone (või kuda nende täpsed nimed on).
Lae mujalt originaal pilt sisse ja GM sees saad sellest sprite luua ning seejärel sisse laetud pilt eemalda mälust. Üldpildis peaks asi jooksma siis ja ei hangu.

Maze I: CryptonRalli III: Crypton<br>
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
Pix
Level 3
Avatar

Liitunud: 23.2.2009
Postitusi: 46
[EEMAL]




postitati 4.9.2009 18:14 Tsiteeri


Tsitaat:
Tsitaat: Peeter
Tsitaat:

hoida kogu aja scaletuna
Kui sul on vaja kogu aeg hoida scaletuna siis miks sa käsitsi näiteks GIMPis ei venita neid, kui sa muretsed mälu pärast?


galerii mõte selles, et paned oma pildid .exe'ga samasse kausta ning need laetakse sisse. mugavuse huvides oleks hea kui galerii ise scaleb need.

kui sellele probleemile lahendust ei leia, siis tuleb lihtsalt suurusepiirang.

to Crypton:

ma uurisin kunagi seda, ja mingi ilge jama oli selle surface_free käsuga. pmst see vist tühjendab surface'i küll, aga sa ei saa selle suurust muuta järgmise pildi jaoks. niiet iga pildi jaoks, mida on vaja scaleda, tehakse uus surface. kuigi surface arv VIST ei tohiks eriti määraja olla, sest selle sisu ju tühjendatakse/kustutatakse mälust.

ja pildid laetakse sisse sprite_add funktsiooniga.

Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
valter
1


Liitunud: 19.1.2005
Postitusi: 1553
[EEMAL]




postitati 4.9.2009 19:03 Tsiteeri


Ei, ära kasuta surfacesi.

Asi näeb välja nii:
>Laed originaal suuruses pildi mängu.
>Mängus image_scaled selle pildi nii väikseks, kui sa tahad. kas 32x32 või 128x128, misiganes!
>Nüüd salvestad selle image_scaletud pildi ära
>Laed selle pildi.

Kõigepealt ütleme et sul on vaja pildi suuruseks saada 640x480, pilt on näiteks 1000x2000. Nüüd tuleb leiutada valem, et saada 1024x768 pilt saada 640x480 suuruseks.

PS! kui laed pildi mängu, siis pane tema x ja y origin KESKELE!
(kasuta sprite_get_width, sprite_get_origin vms asju et saada paika )

image_xscale=640/1024;
image_yscale=480/768;

Nüüd tuleb :

screen_save_part("uuspilt.bmp",0,0,640,480);

ja siis laed uuepildi uuesti mängu, 640x480 suurusena, mitte 1000x2000 :)




aga sellisel juhul nüüd jääb aga pilt välja venitatuna. kui ta on nt 1000x2000 või 2000x1000.
teeme korda nii:

if image_xscale<image_yscale image_yscale=image_xscale;
if image_yscale<image_xscale image_xscale=image_yscale;
(ma ei viitsi hetkel tõlgendada, miks seda vaja. Põhimõtteliselt see peaks töötama. )



PS! Ütle kindlasti kui miskit ei tööta, teen siis näite.

http://www.dmgamez.pri.ee/GRONGO1/uss_walk.gif
Ralli I: dm11Veresaun III: dm11<br>Emo1: icedude, valter8bit I: võistlus kestabAktsioon III (2009): -<br>Aasta mäng 2009: Pilvemees, valter<br>Vabateema II: valter
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum

Hetkel loevad seda teemat:
Mitte ühtegi - 1 külaline

Mine lehekülje lõppu





Foorumi algbaas põhineb XMB mootoril, modifitseeritud Valter Pundi poolt
Kodulehekülg on tehtud Valter Pundi poolt vpundi ät gmail punkt komm