Olen yrittänyt saada tässä 3 tuntia SDL_Imagea lataamaan kuvaa, mutta se ei ole yhteistyökykyinen. Tuossa vähän koodia, pyytäisin että kukaan ei takertuisi koodin järkevyyteen koska kyseessä on vain oppimisprojekti.
#include <cstdlib> #include <SDL.h> #include <string> #include <SDL_image.h> void SDL_Local_DrawSimpleImage(const char* filename, int x, int y) { SDL_Surface* src; SDL_Rect dst_rect; src = IMG_Load(string(workFolder + graphicsFolder + filename).c_str()); if (!src) //If load fails then add a log note { AddToLog(IMG_GetError()); } else //If image loads successfully then draw it and release source surface { dst_rect.x = x; dst_rect.y = y; SDL_BlitSurface(src, NULL, screen, &dst_rect); SDL_Flip(screen); SDL_FreeSurface(src); } }
Ohjelma kääntyy mutta kuvaa ei näy.stdout.txt sanoo että "unsupported image format". Kuva on 24-bittinen bmp, ja ohjelma näyttää myös löytävän sen. SDL:n oma SDL_LoadBMP toimii hyvin, eli voisi olettaa että SDL on asennettu oikein. Alustana käytän Code::Blocksia.
SDL_Imagen asennuksesta sen verran että seuraavat dll:t on ohjelman debug-kansiossa:
SDL.dll
SDL_image.dll
zlib1.dll
libpng12-0.dll
jpeg.dll
libtiff-3.dll
Projekti luonnollisesti löytää SDL_image.h:n, ei tuo muuten kääntyisikään. Löysin myös tiedoston SDL_image.lib ja linkitin sen projektiin. Varmaan huomionarvoista on myös se että en osannut liittää SDL_imagen c-tiedostoja muuten mukaan kuin lisäsin ne vain raakasti projektiin, ilmeisesti on olemassa hienovaraisempikin tapa.
Katsoppa tästä ootko asennuksen tehny oikein:
tkok kirjoitti:
Katsoppa tästä ootko asennuksen tehny oikein:
Kaikki vaiheet näyttää olevan käytynä.
Mikset voi sitten käyttää SDL:n omaa bmp:n latausfunktiota, jos se kerta toimii?
Onnistuuko muiden, kuin bmp-kuvien lataus tuolla IMG_loadilla? Kokeilepa ladata vaikka PNG-kuva.
Janezki kirjoitti:
Löysin myös tiedoston SDL_image.lib ja linkitin sen projektiin. Varmaan huomionarvoista on myös se että en osannut liittää SDL_imagen c-tiedostoja muuten mukaan kuin lisäsin ne vain raakasti projektiin, ilmeisesti on olemassa hienovaraisempikin tapa.
Jos kerta olet linkittänyt .lib:n, niin ei niitä .c tiedostoja tarvitse. Tämä tuskin kuitenkaan ratkaisee itse ongelmaa.
rndprogy kirjoitti:
Mikset voi sitten käyttää SDL:n omaa bmp:n latausfunktiota, jos se kerta toimii?
Onnistuuko muiden, kuin bmp-kuvien lataus tuolla IMG_loadilla? Kokeilepa ladata vaikka PNG-kuva.
Kokeilin png-kuvan latausta, mutta ei tapahtunut sen kummempaa. Ja jos joku formaatti on nyt toimiakseen tuolla kirjastolla niin bmp. Haluan saada muut formaatit kuin bmp:n toimimaan mahdollisten tulevaisuuden peliprojektien takia, onhan joku png:kin aika kilpailukykyinen formaatti.
Gaxx kirjoitti:
Janezki kirjoitti:
Löysin myös tiedoston SDL_image.lib ja linkitin sen projektiin. Varmaan huomionarvoista on myös se että en osannut liittää SDL_imagen c-tiedostoja muuten mukaan kuin lisäsin ne vain raakasti projektiin, ilmeisesti on olemassa hienovaraisempikin tapa.
Jos kerta olet linkittänyt .lib:n, niin ei niitä .c tiedostoja tarvitse. Tämä tuskin kuitenkaan ratkaisee itse ongelmaa.
Joo eli .lib on sama kuin Delphin .doc ja .c sama kuin .pas (?)
.c on c-kielen kooditiedosto, eli sisältää koodia.
Gaxx kirjoitti:
Jos kerta olet linkittänyt .lib:n, niin ei niitä .c tiedostoja tarvitse. Tämä tuskin kuitenkaan ratkaisee itse ongelmaa.
lollol. Itse asiassa ratkaisi. Poistin kaikki IMG -alkuiset .c -tiedostot projektista ja kuva alkoi näkymään välittömästi. Myös png-kuvat näkyy. Aika vekkulia, kiitos avusta :)
GCC:n (MinGW:n) kirjastotiedostojen nimet ovat muotoa lib*.a, .lib-päätteiset taas ovat usein VC++:n kirjastoja. Voi olla, että GCC osaa joskus arvata väärästäkin nimestä, mitä käyttäjä yrittää, mutta kannattaa tietenkin valita aina oikea kirjasto. Komentorivillä oikea asetus on -lSDL_image
, kunhan tarvittava tiedosto löytyy kääntäjän tuntemista hakemistoista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.