Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/11/2019, à 17:25

chris7522

Image bmp ne s'ouvre pas avec SDL

Bonjour a toutes et a tous ,
J'essaie depuis le debut de l'apres midi d'afficher sans succes une image .bmp de taille 800x600 avec la SDL2 . L'image se trouve dans le dossier ou mon terminal est ouvert .
Voici le code :

#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>

#define WIDTH 800
#define HEIGHT 600

void SDL_ExitWithError(const char *message);

int main(int argc,char *argv[])
{
 SDL_Window *window=NULL;
 SDL_Renderer *renderer=NULL;

 /*Lancement SDL*/
 if(SDL_Init(SDL_INIT_VIDEO)!=0)
    SDL_ExitWithError("Echec Initialisation SDL");

 /*Creation fenetre+rendu*/
  if(SDL_CreateWindowAndRenderer(WIDTH,HEIGHT,0,&window,  
     &renderer)!= 0)
  {
     SDL_DestroyRenderer(renderer);
     SDL_DestroyWindow(window);      
     SDL_ExitWithError("Echec creation fenetre et rendu");
  }
 SDL_Surface *image=NULL;
 SDL_Texture *texture=NULL;

 image=SDL_LoadBMP("/home/chris/Bureau/sdl/index.bmp");
 if(image==NULL)
 {
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_ExitWithError("Impossible de charger l'image");
 }
 texture=SDL_CreateTextureFromSurface(renderer,image);
 SDL_FreeSurface(image);

 if(texture==NULL)
 {
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_ExitWithError("Impossible de creer la texture");
 }
 SDL_Rect rectangle;

 if(SDL_QueryTexture(texture,NULL,NULL,&rectangle.w,
                     &rectangle.h)!=0)
 {   
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_ExitWithError("Echec chargement texture");
 }
 rectangle.x=(WIDTH-rectangle.w)/2;
 rectangle.y=(HEIGHT-rectangle.y)/2;

 if(SDL_RenderCopy(renderer,texture,NULL,&rectangle)!=0)
 {    
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_ExitWithError("Echec affichage texture");
 }
 SDL_RenderPresent(renderer);
 SDL_Delay(5000);
 SDL_DestroyRenderer(renderer);
 SDL_DestroyWindow(window);
 return EXIT_SUCCESS;
 }

 void SDL_ExitWithError(const char *message)
 {
  SDL_Log("ERREUR : %s > %s\n",message,SDL_GetError());
  SDL_Quit();
  exit(EXIT_FAILURE);
 }
 
     

Merci de votre aide .

Hors ligne

#2 Le 19/11/2019, à 17:37

lann

Re : Image bmp ne s'ouvre pas avec SDL

Il faudrait que tu testes ton code soit par des retours dans le terminal des états des objets soit en debuguant avec gdb

Dernière modification par lann (Le 19/11/2019, à 17:38)

Hors ligne

#3 Le 19/11/2019, à 22:38

NicoApi73

Re : Image bmp ne s'ouvre pas avec SDL

C'est cette partie là qui ne va pas, probablement lié à la taille de ton image :

 rectangle.x=(WIDTH-rectangle.w)/2;
 rectangle.y=(HEIGHT-rectangle.y)/2;

Commence par :

 rectangle.x=0;
 rectangle.y=0;

Hors ligne

#4 Le 20/11/2019, à 06:49

pingouinux

Re : Image bmp ne s'ouvre pas avec SDL

Bonjour,

chris7522 #1 a écrit :
 rectangle.x=(WIDTH-rectangle.w)/2;
 rectangle.y=(HEIGHT-rectangle.y)/2;

Est-ce normal ?
rectangle.x=(WIDTH-rectangle.w)/2;
rectangle.y=(HEIGHT-rectangle.y)/2;

Hors ligne

#5 Le 20/11/2019, à 07:31

NicoApi73

Re : Image bmp ne s'ouvre pas avec SDL

pingouinux a écrit :

rectangle.x=(WIDTH-rectangle.w)/2;
rectangle.y=(HEIGHT-rectangle.y)/2;

Bien vu, je n'avais pas identifié le problème précisément hier soir. c'est :

(HEIGHT-rectangle.h)/2;[/b]

sinon tu te retrouves avec une image avec une dimension à 0 Le résultat de ce que tu as tapé est indéterminé, rectangle.y n'étant pas initialisé... D'où la faible probabilité d'afficher quelque chose !

EDIT : Correction mise en forme

Dernière modification par NicoApi73 (Le 20/11/2019, à 14:07)

Hors ligne

#6 Le 20/11/2019, à 13:28

chris7522

Re : Image bmp ne s'ouvre pas avec SDL

NicoApi73 a écrit :

C'est cette partie là qui ne va pas, probablement lié à la taille de ton image :

 rectangle.x=(WIDTH-rectangle.w)/2;
 rectangle.y=(HEIGHT-rectangle.y)/2;

Commence par :

 rectangle.x=0;
 rectangle.y=0;

Merci a tous les trois de votre aide , que ferai je sans vous ! Quand je pense que j'y ai passé toute mon apres -midi . J'ai suivi ton premier conseil :
rectangle.x=0;
rectangle.y=0;
Et ca fonctionne ! Par contre , je n'ai pas compris cette ligne :

(HEIGHT-rectangle.[color=#ff0000]h[/color])/2;[/b]

Si je me souviens bien du commentaire de la video , la personne utilisait :

rectangle.x=(WIDTH-rectangle.x)/2;
rectangle.y=(HEIGHT-rectangle.y)/2;

Pour centrer l'image dans le cadre , donc finalement , ce n'est pas nécéssaire de le faire ?

Dernière modification par chris7522 (Le 20/11/2019, à 13:29)

Hors ligne

#7 Le 20/11/2019, à 14:08

NicoApi73

Re : Image bmp ne s'ouvre pas avec SDL

C'est une erreur de mise en forme smile
Lire (HEIGHT-rectangle.h)/2

rectangle.x=0;
rectangle.y=0;

Met toujours l'origine de l'image au même endroit

rectangle.x=(WIDTH-rectangle.w)/2;
rectangle.y=(HEIGHT-rectangle.h)/2;

Permet de centrer l'image

Dernière modification par NicoApi73 (Le 20/11/2019, à 14:11)

Hors ligne

#8 Le 20/11/2019, à 19:24

chris7522

Re : Image bmp ne s'ouvre pas avec SDL

Bien compris . Merci de ton aide smile

Hors ligne