Pages : 1
#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)
<Modéré>
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,
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
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
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
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
Hors ligne