Grafiken anzeigen

Die Bibliothek SDL_image

SDL_image ist eine Erweiterung für SDL, mit der auch .png-Dateien eingelesen werden können (sonst gehen auf Windows nur .bmp-Bilder).

SDL_image benötigt ein eigenes include:

#include <SDL_image.h>

Ein Bild laden

Ein Bild namens fruechte.png kannst Du folgendermaßen laden:

IMG_Init( IMG_INIT_PNG );    
SDL_Surface *fruechte = IMG_Load("fruechte.png");

Die Fensteroberfläche

Gezeichnet wird auf der Oberfläche des Fensters. Diese hat den Typ SDL_Surface* und muss einmalig zu Beginn erstellt werden:

SDL_Surface *surf = SDL_GetWindowSurface(win);

Das Fenster aktualisieren

Jedes Mal, nachdem wir in ein Fenster gezeichnet haben, müssen wir das Fenster aktualisieren. Sonst sehen wir nichts:

SDL_UpdateWindowSurface(win);

Ein ganzes Bild darstellen

Um das Bild aus dem vorigen Beispiel dann auch darzustellen, reicht eine Zeile:

SDL_BlitSurface(fruechte, NULL, surf, NULL);

gefolgt vom Aufruf von SDL_UpdateWindowSurface.

Rechtecke definieren

Um Grafiken an bestimmten Stellen auf dem Bildschirm zu plazieren, müssen wir Rechtecke definieren. Dazu benötigen wir den Datentyp SDL_Rect.

SDL_Rect zielposition;

Diese Rechtecke funktionieren wie ein struct. Sie enthalten vier Werte:

  • x - die Position auf der x-Achse.
  • y - die Position auf der y-Achse.
  • w - die Breite.
  • h - die Höhe.

Alle diese Angaben sind in Pixeln. Wir können ein Rechteck mit Werten befüllen:

zielposition = {x: 0, y: 64, w:32, h:32};

Einen rechteckigen Bildausschnitt zeichnen

Wir könne diese Rechtecke nun verwenden, um einen Ausschnitt des Bildes an eine bestimmte Stelle des Fensters zu zeichnen. Dazu brauchen wir zwei Rechtecke: Eines definiert den zu kopierenden Bereich, eines den Bereich im Fenster. Zunächst deklarieren wir zwei Variablen, die wir dafür verwenden möchten.

Die Rechtecke ersetzen die zwei NULL-Parameter im Aufruf von SDL_BlitSurface(), z.B. so:

SDL_Rect bildausschnitt;
SDL_Rect zielposition;
bildausschnitt = {x: 0, y: 0, w:400, h:100};
zielposition = {x: 64, y: 64, w:32, h:32};
SDL_BlitSurface(fruechte, &bildausschnitt, surf, &zielposition);

Wichtig: Das & vor den beiden SDL_Rect-Variablen nicht vergessen!

results matching ""

    No results matching ""