Afficher des images avec la SDL
Dans cette partie, nous allons apprendre à afficher des images avec la SDL

Sachez que par defaut, la SDL n'offre que la possibilité de manipuler des
.bmp.
Mais cela ne fait rien. Nous verrons dans les chapitres suivants comment contourner ces limites afin de pouvoir gérer un plus grand nombre d'extensions. Commençons tout d'abord par les bases, avec les .bmp, c'est-à-dire: comment charger une image.
Le chargement d'une image
Avant de charger une image, il nous faut créer une surface. En effet, une fois l'image chargée elle sera tout simplement stockée dans une surface ce qui nous permettra de la manipuler beaucoup plus facilement.
Il nous faut donc faire ceci:
SDL_Surface
*image
= NULL
;
Ensuite, nous pouvons charger l'image. Nous allons utiliser, dans ce tutoriel la mascotte de Creanet au format bmp puisque la SDL ne peut, pour l'instant, ne lire que ça.
Enregistrez donc cette image au format bmp:
Dans le dossier contenant votre projet code::blocks. Je vais l'appeler pour ma part "mascotte.bmp".
Voyons maintenant la fonction permettant de charger un .bmp:
SDL_LoadBMP("monFichier.bmp");
Cette fonction retourne une surface. Donc si l'on veut charger, dans la surface image, la mascotte, il nous suffit d'écrire ceci:
SDL_Surface *image = NULL;
SDL_LoadBMP("mascotte.bmp");
Mais comme tout bon programmeur, il nous faut vérifier si le chargement a eu lieu! Pour cela il suffit d'une petite condition comme ceci et c'est good! :
SDL_Surface
*image
= NULL
;
image
= SDL_LoadBMP
("mascotte.bmp");
if
(image
== NULL) //Si le chargement à raté.
return EXIT_FAILURE
; /*Revient au même que return 1; Cela signifie que le programme vient de mal se terminer.*/
Il nous faut maintenant l'afficher à l'écran! C'est parti!
L'affichage de l'image
Comme nous l'avons vu dans le chapitre précédent, il nous faut utiliser la fonction SDL_BlitSurface pour coller une surface sur une autre. Comme une de ces surfaces est une image, ça va tout de suite rendre mieux qu'un carré de couleur
Notre mission sera donc d'afficher notre mascotte à l'écran sur un fond blanc.
Pour cela procédons par étapes:
1) On créer l'écran:
SDL_Surface
*ecran
= NULL
;
SDL_WM_SetCaption
("Charger des images avec la SDL", NULL
);
ecran
= SDL_SetVideoMode
(640, 480, 32, SDL_HWSURFACE
);
2) On le coloris en blanc:
SDL_FillRect
(ecran
, NULL
, SDL_MapRGB
(ecran
->format
, 255, 255, 255));
3) On créer une nouvelle surface dans laquelle on charge notre image:
SDL_Surface
*image
= NULL
;
image
= SDL_LoadBMP
("mascotte.bmp");
if(image
== NULL
) //Si le chargement à raté.
return EXIT_FAILURE
;
4) Enfin, on colle l'image sur l'écran et on met à jour l'écran:
SDL_Rect position
;
position
.x
= 0;
position
.y
= 0;
SDL_BlitSurface
(image
, NULL
, ecran
, &position
);
SDL_Flip
(ecran
);
Ce qui donne ce code final là:
#ifdef __cplusplus
#include <cstdlib>
#else
#include <stdlib.h>
#endif
#ifdef __APPLE__
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
int main
(int argc
, char
** argv
)
{
SDL_Init
(SDL_INIT_VIDEO
);
SDL_Surface
*ecran
= NULL
;
SDL_Surface
*image
= NULL
;
SDL_Rect position
;
position
.x
= 0;
position
.y
= 0;
SDL_WM_SetCaption
("Charger des images avec la SDL", NULL
);
ecran
= SDL_SetVideoMode
(640, 480, 32, SDL_HWSURFACE);
SDL_FillRect
(ecran
, NULL
, SDL_MapRGB
(ecran
->format
, 255, 255, 255));
image
= SDL_LoadBMP
("mascotte.bmp");
if(image
== NULL
) //Si le chargement a raté.
return EXIT_FAILURE
;
SDL_BlitSurface
(image
, NULL
, ecran
, &position
);
SDL_Flip
(ecran
);
int continuer
= 1;
SDL_Event evenement
;
while(continuer
)
{
SDL_PollEvent
(&evenement
);
switch(evenement
.type
)
{
case SDL_QUIT
:
continuer
= 0;
break;
case SDL_KEYDOWN
:
switch(evenement
.key
.keysym
.sym
)
{
case SDLK_ESCAPE
:
continuer
= 0;
break;
default:
break;
}
break;
}
}
SDL_Quit
();
return 0;
}
Appuyez maintenant sur F9 pour compiler et lancer ce programme, il fonctionne comme nous le voulions:
Vous savez afficher une image .bmp avec la SDL. Avouez que cela rend tout de suite mieux qu'un carré de couleur

Amusez-vous à déplacer, suivant la structure position, l'image. Et essayez de coller d'autres images par-dessus pour vous entrainer
Nous allons, dans le chapitre suivant ,voir comment nous pouvons charger des images de tous types avec la SDL afin de les utiliser
Les surfaces et la création de couleur Charger plus de format avec la SDL_Image