« Programmation avec la SDL/Afficher une image » : différence entre les versions

Contenu supprimé Contenu ajouté
Introduction +plan
 
Paragraphe : importer une image au format bitmap
Ligne 4 :
Dans ce chapitre, nous allons aborder la gestion des images avec la SDL. Bien que ce chapitre soit beaucoup moins important que les quatre précédents, il reste néanmoins nécessaire à la création d'un jeu en 2D. En effet, ce serait une assez mauvaise idée de vouloir créer tous les décors simplement en traçant des lignes et des rectangles dans des textures. Nous allons donc voir comment importer des images et les afficher. Dans l'absolu, la SDL n'est capable d'importer que des images au format [[w:Windows bitmap|Windows bitmap]] dont l'extension est .bmp. Heureusement, il existe une librairie permettant de manipuler d'autres formats : '''SDL_Image''', que nous présenterons par la suite.
==Importer une image au format bitmap==
Le seul format d'image géré par la SDL 2.0 est le format bitmap. Pour importer une image au format bitmap, nous allons utiliser des surfaces (SDL_Surface pour la SDL). Nous ne détaillerons pas ici l'utilisation des surfaces. Pour une étude plus approfondie, reportez-vous au chapitre [[Programmation avec la SDL/Les surfaces|Les surfaces]]. Voici la fonction qui permet d'importer une image au format bmp :
<source lang = "c">
SDL_Surface* SDL_LoadBMP(const char* file);
</source>
 
La fonction renvoie NULL s'il s'est produit une erreur. La chaîne de caractère attendue est le chemin permettant d'atteindre l'image. Par exemple, si on souhaite charger l'image ''image.bmp'' qui se trouve dans le répertoire courant du projet, on importera l'image ainsi :
<source lang = "c">
SDL_Surface* image = SDL_LoadBMP("image.bmp");
</source>
 
Il ne nous reste plus qu'à convertir la surface en texture pour afficher l'image. Attention, la texture obtenue ne peut pas être modifiée par les fonctions du renderer. Si vous souhaitez modifier l'image importée , rendez-vous au chapitre [[Programmation avec la SDL/Les surfaces|Les surfaces]]. Voici donc le code complet pour importer une image :
<source lang = "c">
SDL_Surface* image = SDL_LoadBMP("image.bmp");
if(!image)
{
printf("Erreur de chargement de l'image : %s",SDL_GetError());
return -1
}
SDL_Texture* monImage = SDL_CreateTextureFromSurface(renderer,image); //La texture monImage contient maintenant l'image importée
SDL_FreeSurface(image); //Équivalent du destroyTexture pour les surface, permet de libérer la mémoire quand on n'a plus besoin d'une surface
</source>
 
La plupart du temps, lorsque vous obtenez une erreur, c'est que vous avez mal renseigné le chemin permettant d'atteindre l'image. Vous obtenez alors une erreur du type ''Couldn't open ***.bmp''.
 
==Utiliser la bibliothèque SDL_Image 2.0==
===Installation===