Logo creanet 2.0
Afficher des images avec la SDL


Dans cette partie, nous allons apprendre à afficher des images avec la SDLSmiley souris 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:
 

mascotte creanet


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 couleurSmiley rigole

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:

affichage image sdl


Vous savez afficher une image .bmp avec la SDL. Avouez que cela rend tout de suite mieux qu'un carré de couleurSmiley rigole
Amusez-vous à déplacer, suivant la structure position, l'image. Et essayez de coller d'autres images par-dessus pour vous entrainerSmiley souris


Nous allons, dans le chapitre suivant ,voir comment nous pouvons charger des images de tous types avec la SDL afin de les utiliserSmiley souris



Les surfaces et la création de couleur                   Charger plus de format avec la SDL_Image



 
 
 



Créer un site
Créer un site