http://www.pronix.de -> Bücher -> Bücher aus meiner Feder -> Linux-Unix-Programmierung -> Extra Kapitel: SDL -> Bitmap laden und anzeigen

Bitmap laden und anzeigen

Eine unkomprimierte Bitmap-Datei anzuzeigen ist in SDL keine Kunst. Hierfür werden lediglich zwei Funktionen benötigt. Zuerst müssen Sie die Funktion SDL_LoadBMP() zum Laden einer unkomprimierten Bitmap (Bilder mit der Extension *.bmp) verwenden.

SDL_Surface *SDL_LoadBMP(const char *file);


Als Parameter geben Sie die Datei (eventuell inklusive mit Pfad) an, welche geladen werden soll. Zurück bekommen Sie anschließend einen Zeiger auf ein NEUES Surface, bei einem Fehler wird NULL zurückgegeben.

Anschließend müssen Sie das neu erhaltene Surface in das bereits vorhandene kopieren. Dies realisieren Sie mit der Funktion SDL_BlitSurface().

int SDL_BlitSurface( SDL_Surface *src,  SDL_Rect *srcrect,
                     SDL_Surface  *dst, SDL_Rect *dstrect );


Damit kopieren Sie den Bildausschnitt von Surface src in das Surface dst. Wird bei den Parametern srcrect und dstrect nicht NULL übergeben (was bedeutet, das der komplette Bildausschnitt kopiert wird), können Sie je einen Zeiger auf eine Struktur vom Typ SDL_Rect übergeben. Damit können Sie die Größe des zu kopierenden Bildausschnitts von src nach dst angeben - also Bildausschnitte kopieren oder darstellen. Darauf wird noch eingegangen. Die Funktion wandelt, falls notwendig, außerdem auch andere, verschiedene Bildformate automatisch ineinander um. Es ist allerdings nicht möglich, den Bildausschnitt damit zu strecken oder zu stauchen! Bei Erfolg gibt diese Funktion 0, ansonsten bei Auftreten eines Fehlers -1 zurück.

Natürlich muss, um das Bild überhaupt anzeigen zu können, zuvor wieder die Funktion SDL_UpdateRect() aufgerufen werden - damit die Veränderungen auch auf dem Bildschirm gemacht werden.

Wenn Sie mit dem Surface fertig sind, sollten Sie die Ressourcen wieder freigeben. Dies können Sie mit einem Funktionsaufruf von SDL_FreeSurface() erledigen.

void SDL_FreeSurface(SDL_Surface *surface);