SDL_image .png laden?

XoR_1337

Mitglied
Guten Tag zusammen.

Da BMP keine Transparenz unterstützt und weitere Nachteile mit sich bringt, wollte ich in Erfahrung bringen ob es auch möglich ist PNG, JPG usw. zu laden und fand unter anderem dieses kleine Tutorial: http://www.spieleprogrammierer.de/wiki/SDL-Tutorial#SDL_image

Ich habe die einzelnen Teile in meine eigene Main.cpp kopiert, dennoch funktioniert es nicht. Es bricht immer beim Laden der .png datei ab (keine Compiler Fehlermeldung sondern springt in die darunter liegende Fehlerbehandlung). Ich verstehe nur nicht ganz warum es nicht klappt.

In einem anderen Tutorial fand ich, dass man die Dateitypen irgentwie initialisieren müsse, was man bei mir in zeile 29 findet. Doch es bewirkte keine Veränderung, weswegen ich es wieder auskommentiert habe.
Ich hoffe ihr könnt mir sagen was ich falsch gemacht habe.


Hier noch mein Code aus Main.cpp:

Code:
#include <sdl.h>
#include <sdl_image.h>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]) {

	if(SDL_Init(SDL_INIT_VIDEO) == -1)
    {
        // Ups, das hat nicht funktioniert!
        // Wir geben die Fehlermeldung aus.
        cout << "Konnte SDL nicht initialisieren! Fehler: " << SDL_GetError() << endl;
        return -1;
    }

	SDL_Surface* screen = SDL_SetVideoMode(800, 600, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
	if(!screen)
	{
		// Fehler! Fehlermeldung ausgeben und Programm beenden.
		cout << "Konnte SDL-Fenster nicht erzeugen! Fehler: " << SDL_GetError() << endl;
		return 1;
	}
	 
	// Nun setzen wir noch den Titel des Fensters.
	SDL_WM_SetCaption("SDL-Beispielprogramm", "SDL-Beispielprogramm");


	//IMG_Init(IMG_INIT_PNG);

	bool run = true;
 
	// die Event-Schleife
	while(run)
	{
		// Wir holen uns so lange neue Ereignisse, bis es keine mehr gibt.
		SDL_Event event;
		while(SDL_PollEvent(&event))
		{
			// Was ist passiert?
			switch(event.type)
			{
			case SDL_QUIT:
				// Das Programm soll beendet werden.
				// Wir merken uns das und brechen beim nächsten Mal die Schleife ab.
				run = false;
				break;
			}
		}

	 
		SDL_Surface *image  = IMG_Load("image.png");
		
		if(!image)
		{
			// Fehler!
			cout << "Konnte das Bild nicht laden! Fehler: " << IMG_GetError() << endl;
			return 2;
		}

		SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 255));
 
		// Hier zeichnen wir unser Bild an der Position (100, 50).
		SDL_Rect imagePosition;
		imagePosition.x = 100;
		imagePosition.y = 50;
		SDL_BlitSurface(image, 0, screen, &imagePosition);
		 
		// Dann aktualisieren wir den Bildschirm, damit wir auch etwas sehen.
		SDL_Flip(screen);

	}
	 
	// SDL herunterfahren
	SDL_Quit();


	return 0;
}


Danke allen schon mal im Vorraus!

MFG XoR_1337
 
Habe nun den Fehler gefunden. Er konnte die libpng15-15.dll nicht finden, obwohl ich in den Projekteigenschaften den Pfad angegeben habe. Musste nun die .dll dateien direkt in den Projektordner kopieren damit es funktioniert.

Dennoch ein Dankeschön an dein Engagement, Matthias :)

MFG XoR_1337
 
Zurück