[SDL] Mon code ne m'affiche pas mon image ?
Résolu/Fermémamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 6 déc. 2022 à 10:59
- Sdl_destroyrenderer
- Code asci - Guide
- Code puk bloqué - Guide
- Image iso - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
1 réponse
Modifié le 6 déc. 2022 à 11:01
Bonjour,
Alors quelques précisions préalable, il faut utiliser SDL2 pour compiler ce code. Avant d'expliquer comment faire, je me permets de t'indiquer ce qui ne va pas dans le code que tu proposes pour que tu comprennes pourquoi il ne marche pas
- Il n'y a pas de boucle d'événements, or toute librairie permettant d'afficher une interface graphique repose sur un tel mécanisme. C'est ce qui permet au programme d'attendre qu'il se passe quelque chose. Si tu sors de ce paradigme, ça ne marchera pas car les fonctions ne sont pas prévues pour.
- Tu détruis en début de programme des choses que tu n'as même pas encore créé.
- Tu n'utilises pas renderer pour afficher l'image.
Par ailleurs et même si ça n'a rien à avoir avec ton problème appeler "Quit;" n'a aucun effet. C'est un entier, le programme l'évalue, mais ne fait rien de cette valeur. Si tu supprimais les lignes correspondantes, le programme se comporterait donc exactement pareil. Je pense que tu as voulu déclarer une fonction (dans ce cas il aurait fallu l'appeler plutôt quit pour suivre les conventions du C).
#include <stdio.h> void quit() { printf("quit\n"); } int main() { quit(); return 0; }
Pour corriger ton programme, on peut repartir de cet exemple. Afin de rendre la réponse plus concise j'ai enlevé toutes les vérifications que tu prenais le soin de faire sur les créations d'objets SDL, mais idéalement tu peux les remettre c'est plus propre.
#include <stdio.h> #include <SDL2/SDL.h> #define WIDTH 800 #define HEIGHT 600 int main (int argc, char *argv[]) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { return 1; } SDL_Window * window = SDL_CreateWindow("Image Loading", 100, 100, WIDTH, HEIGHT, 0); SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); SDL_Surface * surface = SDL_LoadBMP("toto.bmp"); SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, surface); SDL_Rect rectangle; SDL_QueryTexture(texture, NULL, NULL, &rectangle.w, &rectangle.h); rectangle.x = (WIDTH - rectangle.w) / 2; rectangle.y = (HEIGHT - rectangle.h) / 2; while (1) { SDL_Event e; if (SDL_WaitEvent(&e)) { if (e.type == SDL_QUIT) break; else if (e.type == SDL_KEYUP && e.key.keysym.sym == SDLK_ESCAPE) break; } SDL_RenderClear(renderer); SDL_RenderCopy(renderer, texture, NULL, &rectangle); SDL_RenderPresent(renderer); } SDL_DestroyTexture(texture); SDL_FreeSurface(surface); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); return 0; }
Bonne chance