IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Image noire, dessins non affichés.


Sujet :

SDL

  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut Image noire, dessins non affichés.
    Bonjour

    Je refais un passage sous SDL... Mon premier test ne marche pas du tout

    J'avoue ne pas trouver l'origine de l'erreur ! Ma cafetière est toujours noire ! Je vide le code des lignes inutiles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    /* variable globales : pas joli, mais, c'est dans le cahier des charges :( */
    SDL_Surface * fond, * cafetiere, *tasse, * bouton, * resistance, *resistance_chaude;
     
    signed short Init_Cafetiere()
    {
        /* initialisation SDL */
        SDL_Rect dstrect; /* servira à placer les éléments */
     
        // initialize SDL video
        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
        {
            printf( "Unable to init SDL: %s\n", SDL_GetError() );
            return 2;
        }
     
        // make sure SDL cleans up before exit
        atexit(SDL_Quit);
     
        /* initialisation de l'image de la cafetiere */
        cafetiere = IMG_Load("Photos/Cafetiere_Vide.jpg");
        if (!cafetiere)
        {
            printf("Incapable d'ouvrir l'image Photos/Cafetiere_Vide.jpg : %s\n", SDL_GetError());
            return 3;
        }
     
        /* initialisation du fond */
        fond = SDL_SetVideoMode(cafetiere->w, cafetiere->h, 32,SDL_HWSURFACE|SDL_DOUBLEBUF); /* écran au format de l'image */
        if ( !fond )
        {
            printf("Unable to set %dx%d video: %s\n",cafetiere->w, cafetiere->h, SDL_GetError());
            return 4;
        }
     
     
     
     
     
    }
     
    signed short Simu_Cafetiere()
    { /* gestion de boucle evenement */
        int test=1;
        signed short continuer=1, bp_ma=0;
        SDL_Event event;
        signed short x,y;
        SDL_Rect dstrect; /* servira à placer les éléments */
        SDL_Surface * niveau; /* T° et niveau d'eau */
     
        /* préparation de la cafetière vierge */
        dstrect.x=0;
        dstrect.y=0;
        SDL_BlitSurface(fond, 0, cafetiere, &dstrect);
        SDL_Flip(fond);
     
     
     
    }
    Je peux faire d'autres choses sur mon image comme coller un rectangle rouge, mais, on ne le voit pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         dstrect.x=383;
         dstrect.y=376-NiveauEau*57/20; /* le haut change toujours ! */
         niveau=SDL_CreateRGBSurface(SDL_HWSURFACE|SDL_DOUBLEBUF,82,NiveauEau*57/20-2,32, 50, 150, 255,150);
         SDL_BlitSurface(fond, 0, niveau, &dstrect);


    nb : je peux faire passer l'image du noir au vert avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_FillRect(fond, 0, SDL_MapRGB(fond->format, 0, 255, 0));
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Ça aussi c'est tout noir !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       niveau=SDL_CreateRGBSurface(SDL_HWSURFACE|SDL_DOUBLEBUF,cafetiere->w, cafetiere->h,32, 0, 0, 0, 0);
        SDL_FillRect(niveau, NULL, SDL_MapRGB(niveau->format, 255,255,255)); 
        SDL_BlitSurface(fond, 0, niveau, &dstrect);
        SDL_FreeSurface(niveau);
       // SDL_BlitSurface(fond, 0, cafetiere, &dstrect);
        SDL_Flip(fond);
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Le probleme vient ici en faite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SDL_BlitSurface(fond, 0, niveau, &dstrect);
    les bon argument sont SDL_BlitSurface(SDL_Surface *src,const SDL_Rect *srcrect,SDL_Surface *dst ,SDL_Rect *dstrect);

    Donc fond doit être la destination donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        SDL_BlitSurface(niveau, NULL, fond, &dstrect);
    apres je trouve que fond est vraiment un mauvais nom , je trouve écran ou screen plus pertinent , la SDL ne fait que copier/coller des surfaces , le fond et écran n'est pas toujours la même chose.

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    http://www.libsdl.org/docs/html/sdlblitsurface.html : c'est bien vrai !

    Comme quoi, parfois il est dur de voir ses propre bêtises

    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Images trop volumineuses non affichées en mosaïque
    Par susumu dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2014, 18h14
  2. [ImageMagick] Image créée mais non affichée en include
    Par Adaviada dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 11/09/2007, 10h26
  3. [JBoss portal] Image non affichée
    Par ploxien dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 05/02/2007, 21h07
  4. [Syntaxe] Image non affichée
    Par patrick_deb dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 30/12/2006, 11h16
  5. [APACHE 2] Images / Css Non affichée
    Par djshaker dans le forum Apache
    Réponses: 1
    Dernier message: 22/02/2006, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo