Hei
Ongelmani koskee kuvan pixi.bmp lataamista kuvapinnalle.
aluksi luon pinnan nimeltä px
SDL_Surface *px =NULL;
Kuva on sekä suoraan kovon juuressa c:\pixi.bmp että projektin omassa kansiossa C:\Projektit\New Folder\3pisteellipsi\pixi.bmp
olen yrittänyt saada kuvaa ladattua px seuraavilla koodiriveillä joista yksikään ei toiminiut
px=SDL_LoadBMP("pixi.bmp");
px=SDL_LoadBMP("C:\Projektit\New Folder\3pisteellipsi\pixi.bmp");
px=SDL_LoadBMP("C:\pixi.bmp");
px=SDL_LoadBMP("C:\\pixi.bmp");
px=SDL_LoadBMP("C:/pixi.bmp");
Että jos joku voisi kertoa kuinka se tehdään oikein?
Koska \-merkkiä käytetään tekstissä erikoismerkkien (\n, \t, \" jne.) esittämiseen, se täytyy myös itse kirjoittaa muodossa "\\". Poluista ainakin "pixi.bmp", "C:\\pixi.bmp" ja myös "C:/pixi.bmp" ovat oikein. Pelkkä "pixi.bmp" viittaa tiedostoon ohjelman työhakemistossa, joten sen pitäisi toimia, jos ohjelma on käynnistetty jommassakummassa mainitsemassasi hakemistossa. Tämä on tietenkin myös järkevin tapa polun ilmaisemiseen sikäli, että näin ohjelman toiminta ei ole riippuvainen absoluuttisesta sijainnista.
Debug-mielessä voit lisätä ohjelmaan rivin system("dir")
, josta saattaa selvitä, missä hakemistossa ohjelma työskentelee ja onko kuva paikallaan. Tarkistuksen voit tehdä myös fopen-funktiolla:
int tiedosto_on(const char *nimi) { FILE *f = fopen(nimi, "r"); if (f) fclose(f); return f ? 1 : 0; } // ... if (!tiedosto_on("pixi.bmp")) { printf("Tiedosto puuttuu!\n"); abort(); }
Jos kaikki muu on kunnossa, on toki mahdollista, että kuvatiedostossa on vikaa. Onhan se varmasti ihan oikea BMP-tiedosto?
Hei taas
Nyt kuvan sijainti oikea ja ohjelma lataa sen normaalisti.
Ohjelma ei kuitenkaan tulosta mitään.
Alustan näyttöä varten tason
SDL_Surface *naytto; naytto = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
Alussa määriteltyjen vakioiden pohjalta:
const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; const int SCREEN_BPP = 32;
Piirron hoidan näin :
// mainissa: PiirraKuva(px, naytto, 45,45); //myöhemmin: void PiirraKuva(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y) { SDL_Rect alue; // mille alueellä näyttöä kuva piirretään alue.x = x; // koordinaatit alue.y = y; SDL_BlitSurface(kuva, NULL, naytto, &alue); // piirto }
Tämä kaikki on tehty melkein suoraan esimerkkien mukaan, silti ikuna jää mustaksi :(
EDIT: kooditagit
Lisääpä viimeisen SDL_BlitSurface
n perään
SDL_UpdateRect(naytto,0,0,naytto->w,naytto->h);
Se vasta siirtää naytto
-pinnassa olevan kuvan näytölle. Asia muuten mainitaan myös täällä.
os kirjoitti:
Lisääpä viimeisen
SDL_BlitSurface
n peräänSDL_UpdateRect(naytto,0,0,naytto->w,naytto->h);Se vasta siirtää
naytto
-pinnassa olevan kuvan näytölle. Asia muuten mainitaan myös täällä.
Joo kappas, ny toimii
Aikoinaan viimeeksi kun SDL tarvitsin niin käytin kaksoispuskurointia niin muistelin ettei "yksöis"puskuroidussa kuvassa tarvita tuollaisia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.