Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Visionneuse d'image

pourquoi ca marche pas?

    8 juin 2006 à 13:24:29

    Bonjour à tous.
    Voila, j'ai récemment eu l'idée (tordue me diront certain) de créer une visionneuse d'image sous GNU/Linux.
    D'autant plus tordue qu'elle existe déja ;) .
    Mais bon, c'est tout de même une bonne occasion de tester mes compétences en SDL et apprendre une nouvelle bibliothèque : dirent.h.
    Seulement voila, après compilation (gcc -o visio main.c -Wall -lSDL -lSDL_image), lorsque j'exécute l'appli, une fenetre noire s'ouvre et c'est tout. C'est donc que mes images sont soit pas blitté, soit que leur pointeur respectifs pointent sur NULL...
    Comme je ne trouve pas la réponse, je me tourne vers vous en espérant que qqn puisse résoudre mon problème.
    Voilà le code ce merveilleux ( :-° ) programme:


    //librairies standards
    #include <stdio.h>
    #include <stdlib.h>
    #include <dirent.h>

    //librairies graphiques
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    int main(int argc, char *argv[])
    {
            //------------------ Vérification du nombre d'argument ----------------
            if(argc <= 1)
            {
                    printf("Choisissez un répertoire à traiter\n");
                    return EXIT_FAILURE;
            }
            //--------------------------------------------------------------------------
                   
            //------------ Traitement du répertoire -----------------------------
            struct dirent **namelist;
            int n; // variable de parcours de tableaux

            n = scandir(argv[1], &namelist, 0, alphasort);
           
            free(namelist[0]); // on supprime . et .. puisqu'on en a pas besoin :)
            free(namelist[1]);
           
            // ------------------------------------------------------------------
           
            // ------------------ Initialisation de la SDL ----------------------
            SDL_Init(SDL_INIT_VIDEO);
            SDL_WM_SetCaption("Visionneuse d'image", NULL);

                    // ------------- l'écran --------------- //
                    SDL_Surface *ecran; //=> l'écran
                    ecran = SDL_SetVideoMode(400, 500, 32, SDL_HWSURFACE);
                    // ----------------------------------- //
                    // ------------ Chacune des images du répertoire ------------//
                    int i;
                    SDL_Surface *image[500];
                    for(i = 2; i < n; i++)
                    {
                            image[i - 2] = IMG_Load(namelist[i]->d_name);
                    }
                    // ------------------------------------------------------//               
            // --------------------------------------------------------------
            //
            //
            // --------------------Le prog en lui même -------------------
            SDL_Event event;
           
            SDL_Rect position;
            position.x = 0;
            position.y = 0;
           
                    SDL_BlitSurface(image[1], NULL, ecran, &position);
            int continuer = 1;
            int numeroPage = 0;
            while(continuer)
            {
                    SDL_WaitEvent(&event);
                    switch(event.type)
                    {
                            case SDL_QUIT:
                                    continuer = 0;
                                    break;
                            case SDL_KEYDOWN:
                                    switch(event.key.keysym.sym)
                                    {
                                            case SDLK_ESCAPE:
                                                    continuer = 0;
                                                    break;
                                            case SDLK_LEFT:
                                                    if(numeroPage - 1 >= 0)
                                                            numeroPage--;

                                                    break;
                                            case SDLK_RIGHT:
                                                    if(numeroPage + 1 <= n)
                                                            numeroPage++;

                                                    break;
                                            default:
                                                    break;
                                    }
                    }
                    SDL_BlitSurface(image[numeroPage], NULL, ecran, &position);
                    SDL_Flip(ecran);
            }
                                                                   
            // -------------------------------------------------------------
            return EXIT_SUCCESS;
    }



    Merci d'avance pour vos réponses
    • Partager sur Facebook
    • Partager sur Twitter

    [C] Visionneuse d'image

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown