Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: JPG Kuvien käyttö BMP:n sijaan

Sivun loppuun

Tumpelo [31.01.2006 16:39:57]

#

Lyhyt ja ytimekäs: Eli kuinka ladataan SDL_Surfaceen jpg kuva? Käytössä siis SDL ja SDL_Image-kirjasto.

aWW [31.01.2006 16:46:35]

#

SDL_Surface *pinta = IMG_Load("kuva.jpg");

rndprogy [31.01.2006 17:10:33]

#

Tuohan vaatii toki että on SDL_image asennettuna.

Deewiant [31.01.2006 17:12:22]

#

Ja käytössähän oli toki "SDL ja SDL_Image-kirjasto."

rndprogy [31.01.2006 18:02:07]

#

oho.. >_>

Metabolix [31.01.2006 18:02:14]

#

(Miksi käyttää JPG:tä, kun voi käyttää PNG:tä? Ellei ole valokuvasta kyse...)

aWW [01.02.2006 09:32:57]

#

jpg vie vähemmän tilaa

sooda [01.02.2006 09:36:45]

#

Riippuu ihan kuvasta, monissa tapauksissa png vie vähemmän, ja se on vielä häviötönkin.

Tumpelo [01.02.2006 14:42:41]

#

Onkos noilla formaateilla eroa siinä että kuinka nopeaa niiden piirto ja lataus on? Tällä hetkellä käytän PNG:tä... Sen ja BMP:n välillä ainakin oli aivan helkutin iso nopeusero (testikoneena Celeron 550mhz ja 8mt näyttis).

Metabolix [01.02.2006 17:24:32]

#

Nopeusero missä?
Piirtovaiheessa se on joka tapauksessa muutettu samaan muotoon, joten siinä ei ole eroa. Lataamisnopeus riippuu sitten siitä, missä koneen pullonkaula on. Jos levykkeeltä lukee, niin kannattaa ehdottomasti käyttää pakatumpaa muotoa, koska lukeminen on hidasta. Kovalevyltä tulee yleensä sen verran nopeasti tavaraa, ettei sen pitäisi olla ongelma.

Piirtonopeuksien ero voi kuitenkin selittyä, jos bittisyvyys on eri; kannattaa muuttaa lataamisen jälkeen kaikki samaan muotoon kuin näyttöpinta (eli varmaankin blitata uudelle saman kokoiselle mutta eri formaattiselle pinnalle ja tuhota alkuperäinen kuvapinta), niin piirtäminen kaiken järjen mukaan nopeutuu. Uskoisin.

Lataus tapahtuu ohjelman aikana vain "kerran", tai siis sitä ei toisteta joka framella, joten sen nopeudella ei ole niinkään käytännön merkitystä.

Tumpelo [01.02.2006 17:31:32]

#

Noo pätkiminen väheni huomattavasti... Mutta tosin tällä hetkellä kuvapinta joka näytetään eli Screen on 24 bittinen ja kuvat ilmeisesti 32 bittisiä... Olen kokeillut vaihtaa Screenin 32 bittiseksi mutta tällöin ohjelma menee ihan sekaisin, eli kuva välkkyy ja tulee kaikkia grafiikkavirheitä.

Metabolix [01.02.2006 17:37:21]

#

Mitähän grafiikkavirheitä? Käytätkö kaksoispuskurointia?

Tumpelo [01.02.2006 17:41:23]

#

Kaksoispuskurointi on käytössä. Eli kuva välkkyy ja hiiren kohdalla on välkkeen toisella jaksolla vain musta laatikko. Myös jotkin piirrettävät objektit menevat valkoisiksi, mutta ei kaikki. 24 bittisenä ei siis ole mitään ongelmia mutta 32 bittisenä kyllä...

Metabolix [01.02.2006 17:46:24]

#

Kokeile HW_SURFACE ja SW_SURFACE. Ja sitten voisit kokeilla muuttaa kuvat 24-bittisiksi, jos sellainen SDL:llä onnistuu (en ole liikaa tutustunut). Eli uusi 24-bittinen pinta jokaiselle, blittaus siihen ja alkuperäinen kuvapinta pois, olettaisin.

Tumpelo [01.02.2006 17:53:25]

#

Mitähän pelleilyä tämä nyt on..? Vaihdoin näyttötilaksi ikkuna niin kaikki toimi kuten pitikin. Eikä ole ensimmäinen kerta, sillä aiemmin minulla oli vaikeuksia hiiren kanssa ja sekin suostui vain ikkunatilassa toimimaan...

Metabolix [03.02.2006 14:06:39]

#

Onko uusin SDL yms? Onko samoja ongelmia muilla koneilla ajaessa?

Tumpelo [03.02.2006 15:12:10]

#

SDL:n pitäisi olla uusin ja olen kahdella koneella testannut.

Gaxx [03.02.2006 19:48:40]

#

Itselläni on ollut colorkeyn kanssa ongelmia kokoruututilan ja ikkunan välillä. Kun se toimii ikkunatilassa, se ei toimi kokoruututilassa ja päinvastoin. Ongelmasi ei siis ole uniikki.

ristokor [20.02.2006 20:32:00]

#

Minä en saanut asennettua SDL_image kirjastoa. Latasin netistä kirjaston, purin sen ohjelmani kansioon (ja lisäksi Dev-cpp:n include, Sdl hakemistoon, Kääntäjä errorittaa include lauseessa, mitä pitäisi tehdä, jotta sen saisi toimimaan.

Tässä errori: SDL_image.h No such file or directory.

sooda [20.02.2006 20:40:42]

#

Latasitko varmasti kehityskirjastot etkä vain runtime-dll:ää? Devvikirjastoissa tulee SDL_image.h ja kaverit, jotka puretaan tietty sopiviin hakemistoihin, minkä luulis paketissa olevan valmiiks oikein...

Metabolix [20.02.2006 20:43:37]

#

Lataa sen DevPak ja asenna siitä. Olet mitä ilmeisimmin purkanut väärän paketin ja/tai väärään paikkaan. DevPak repository ei ollut halukas yhteistyöhön, joten tässä suora linkki tällä hetkellä: http://test.nix.lv/devpak/SDL_image-1.2.3.DevPak

ristokor [20.02.2006 21:13:07]

#

Joo latasin tuon Metabolixen neuvoman tiedoston ja asensin sen Dev-cpp:n asennusohjelmalla. Nyt kuitenkin kääntäjä valittaa:

[Linker error] undefined reference to 'IMG_load'.

Mitäs tuolle pitäisi tehdä?

Heikki [20.02.2006 21:15:11]

#

Linkkerin virhe tarkoittaa että kyseinen IMG_load-funktio esitellään kyllä mutta sille ei ole toteutusta, ts. sinun on linkitettävä kyseisen tiedoston toteutus mukaan ohjelmaan. Eli käytännössä lisättävä linkkerin parametreihin -lSDL_image (muistaakseni noin). Linkkerin asetukset löytyvät Dev-C++:ssa projektin asetuksista.

Edit. Sooda oot hidas :)

sooda [20.02.2006 21:15:16]

#

Linkkerin optioihin -lSDL_image, veikkaisin.

ristokor [20.02.2006 21:53:47]

#

Suuret kiitokset jälleen!
Lähti toimimaan.

ristokor [21.02.2006 16:40:15]

#

Jaaha, tulipa ongelma taasen. Nyt kun yritän ladata kuvaa

tausta=IMG_Load("valikko.jpg");

niin ajovaiheessa tulee virheilmoitus: "Proseduurin aloituskohtaa SDL_Error ei löydy dynaamisesti linkitettävästä kirjastosta SDL.dll."

tausta=SDL_LoadBMP("tausta.bmp");

Tuolla kyllä toimii. Mistähän kyseinen virhe voisi johtua.

ristokor [21.02.2006 20:45:51]

#

Voisikohan se liittyä piirtofunktioon. Eli pitääkö .jpg kuville olla omanlaisensa piirtofunktiot, kuin .bmp:n SDL_BlitSurface?

Blaze [21.02.2006 20:50:24]

#

Ei, niin bittikartat kuin JPG-kuvatkin luetaan muistiin samaan muotoon, jolloin niitä voidaan piirtää samalla funkkarilla.

Vaikuttaisi minusta ennemminkin siltä, että SDL-imagen DLL (millä nimellä se sitten lieneekään) puuttuisi. SDL-imagen funktioitahan ei luonnollisesti löydy perus-SDL:n DLL:stä.

Tumpelo [21.02.2006 20:51:08]

#

ristokor kirjoitti:

Voisikohan se liittyä piirtofunktioon. Eli pitääkö .jpg kuville olla omanlaisensa piirtofunktiot, kuin .bmp:n SDL_BlitSurface?

Sama funktio käy molemmille. Mutta aika ihmeellinen kyllä tuo virheilmoitus... Onhan kaikki linkitykset ynnä muut varmasti kohdallaan?

EDIT: Myöhässä. :)

ristokor [21.02.2006 20:59:32]

#

Ahaa, eli mistäköhän saisin tuon "erikois" DDL:n. Tuleeko se SDL_imagen matkassa?
Ja pitääkö se laittaa ohjelman kanssa samaan kansioon?

Tumpelo [21.02.2006 21:07:32]

#

No sehän löytyy DevCpp:n kansiosta jossa SDL_imagen kansiosta. Samaan kansioon ohjelman kanssa lyöt sen...

Lisäksi sinun tarttee lyödä sinne zlib1.dll, libpng12.dll ja jpeg62.dll.

EDIT: Tulipa mielenkiintoinen lauseenrakenne...

ristokor [21.02.2006 21:50:19]

#

Etsin, mutten löytänyt tiedostoja libpng12.dll ja jpeg62.dll. Löysin libpng13.dll:n ja jpeg.dll:n, muttei niillä toiminut. Olisiko nuo löytämäni jotenkin uudempia vai mikäköhän on. SDL_image.dll on myöskin pelihakemistossani. Ihmetyttää, kyllä kun kaikki muut on aina moitteettomasti toiminut, mutta jotakin teen varmasti väärin. Näin lataan kuvan: tausta=IMG_Load("valikko.jpg"); ja oikeinhan tuon pitäisi olla.

Metabolix [21.02.2006 22:20:36]

#

No mutta tuohan valitti SDL_Error-funktiosta ja SDL.DLL:stä. Eli onko SDL.DLL paikallaan ja kai alustat SDL:n ennen kuin yrität käyttää SDL_imagea?

ristokor [21.02.2006 22:54:19]

#

Joo on SDL.dll oikeassa paikassa ja SDL (video) alustettu, johtuisiko tuo errori sitten siitä että jotain menee pieleen/ei alustu ajon aikana ja sitten yrittäisi kutsua erroria, mutta sitä ei ole? Yritän etsiä SDL:n sivulta lisätietoa

ristokor [22.02.2006 15:14:40]

#

Jess! Nyt lähti toimimaan. Latasin SDL:n sivuilta uusimman SDL.dll tiedoston.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta