Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1375 connectés 

  FORUM HardWare.fr
  Programmation
  C

  sdl et vc++2010

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sdl et vc++2010

n°2142001
hb2012
Posté le 11-05-2012 à 15:39:08  profilanswer
 

slt tout le monde,
je sais bien mes amis que c'est pas possible d'afficher une image avec c++. par contre je m'adresse à vous pour savoir s'il existe une solution, en utilisant des autres bibliothèques (par exemple), et s'il vous plait m'expliquer précisément comme l'ajouter (ces bibliothèques) en détail .
Ce pour cela j'ai utilisé le sdl et puis j'ai déjà rencontré un code pour affichage une image en utilisant
sdl_image et le voilà:

Code :
  1. #include "SDL.h"
  2. #include "SDL_image.h"
  3. #include "tools.h"
  4. int main(int argc, char *argv[])
  5. {
  6. int pidx = 0 ;
  7. SDL_Surface *screen ;
  8. enum walk { justice1 , justice2 , justice3 , justice4
  9. , justice5 , justice6 , justice_No };
  10. SDL_Surface *anim[justice_No];
  11. SDL_Rect animRect ;
  12. animRect.x = 160 ;
  13. animRect.y = 160 ;
  14. atexit(SDL_Quit);
  15. if( SDL_Init(SDL_INIT_VIDEO) < 0 ) exit(1);
  16. SDL_WM_SetCaption("SDL Window", NULL);
  17. screen = SDL_SetVideoMode( 400 , 300 , 32 , SDL_DOUBLEBUF|SDL_HWSURFACE|SDL_ANYFORMAT);
  18. // Use the new add image loader function to load GIF , JPG , PNG image file.
  19. // Here shows two equivalent ways to load a image file that has a white
  20. // background (RGB=255,255,255)
  21. anim[0] = ImgLoader("./anim/justice1.gif",1,255,255,255,0);
  22. anim[1] = ImgLoader("./anim/justice2.gif",1,255,255,255,0);
  23. anim[2] = ImgLoader("./anim/justice3.gif",1,255,255,255,0);
  24. anim[3] = ImgLoader("./anim/justice4.gif",1,255,255,255,0);
  25. anim[4] = ImgLoader("./anim/justice5.gif",1,255,255,255,0);
  26. anim[5] = ImgLoader("./anim/justice6.gif",1,255,255,255,0);
  27. for(int tick=0 ; tick<1000 ; tick++ ) {
  28. SDL_FillRect(screen , NULL , 0x221122);
  29. SDL_BlitSurface( anim[pidx] , NULL , screen , &animRect );
  30. SDL_Flip(screen);
  31. SDL_Delay(20); // Delay 20 msec
  32. pidx++;
  33. if(pidx >= justice_No) pidx = 0;
  34. }; // for(int tick=0 ; tick<1000 ; tick++ ) { END
  35. return 0;
  36. }


Mais j'ai une problème au compilation , il m'a donneé un msg d'erreure comme suit:

Code :
  1. Exception non gérée à 0x77ce15de (ntdll.dll) dans sdlimg.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000004.


    en fait j'espère que vous avez un volonté de m'aider car j'ai un longtemps que j'ai compris cette erreure car je suis débutant en langage c.
    merci et au revoir .

mood
Publicité
Posté le 11-05-2012 à 15:39:08  profilanswer
 

n°2142022
tpierron
Posté le 11-05-2012 à 17:09:04  profilanswer
 

Moué, déjà ton erreur ce n'est pas à la compilation mais à l'éxecution de ton programme. Visiblement un déréférencement de pointeur NULL, avec 99% de chance qu'une des fonctions ImgLoader() ait retourné une telle valeur. Commence déjà par vérifier le code de retour de cette fonction :
 

Code :
  1. for (pidx = 0; pidx < justice_No; pidx ++) {
  2.    char buffer[64];
  3.    sprintf(buffer, "./anim/justice%d.gif", pidx);
  4.    anim[pidx] = ImgLoader(buffer,1,255,255,255,0);
  5.    if (anim[pidx] == NULL)
  6.        fprintf(stderr, "Impossible de charger '%s'.\n", buffer), exit(1);
  7. }


 
À remplacer ton bloc de ImgLoader(). Accessoirement compiler en DEBUG pourrait te donner la ligne où ça plante...

n°2142030
hb2012
Posté le 11-05-2012 à 17:49:24  profilanswer
 

tpierron a écrit :

Moué, déjà ton erreur ce n'est pas à la compilation mais à l'éxecution de ton programme. Visiblement un déréférencement de pointeur NULL, avec 99% de chance qu'une des fonctions ImgLoader() ait retourné une telle valeur. Commence déjà par vérifier le code de retour de cette fonction :
 

Code :
  1. for (pidx = 0; pidx < justice_No; pidx ++) {
  2.    char buffer[64];
  3.    sprintf(buffer, "./anim/justice%d.gif", pidx);
  4.    anim[pidx] = ImgLoader(buffer,1,255,255,255,0);
  5.    if (anim[pidx] == NULL)
  6.        fprintf(stderr, "Impossible de charger '%s'.\n", buffer), exit(1);
  7. }


 
À remplacer ton bloc de ImgLoader(). Accessoirement compiler en DEBUG pourrait te donner la ligne où ça plante...


slt M,
je vous remercie a votre intéressante , mais j'ai déjà insérer une fichier .h dans mon projet:

Code :
  1. #ifndef TOOLS_H
  2. #define TOOLS_H
  3. #include "SDL.h"
  4. #include "SDL_image.h"
  5. // This function load a image file to a surface
  6. // Set bCKey with colorkey (R,G,B) to clear a color on the image
  7. // Set alpha value for transparency 0(No transparent) ~ 255(Ivisible)
  8. inline SDL_Surface *ImgLoader(char *file,bool bCKey, int r , int g , int b , int alpha)
  9. {
  10.     SDL_Surface *pic;
  11.     pic = IMG_Load(file); // From SDL_image.h , load the image to pic
  12.     // Log error message into stderr.txt if happened
  13.     if(pic==NULL) fprintf(stderr,"Missing image %s : %s\n",file,IMG_GetError());
  14.     if( bCKey ) {
  15.         // Sets the color key (transparent pixel) in a blittable surface and RLE acceleration.
  16.         SDL_SetColorKey(pic,SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(pic->format,r,g,b));
  17.          }
  18.     if(alpha) SDL_SetAlpha(pic, SDL_SRCALPHA|SDL_RLEACCEL , 255 - alpha);
  19.     // This function takes a surface and copies it to a new surface of the
  20.     // pixel format and colors of the video framebuffer, suitable for fast
  21.     // blitting onto the display surface.
  22.     pic = SDL_DisplayFormat(pic);
  23.     return (pic);
  24. }
  25. #endif

 
alors que le debug de ce projet est arrêté au niveau la ligne suivante:

Code :
  1. anim[0] = ImgLoader("./anim/justice1.gif",1,255,255,255,0);

 

n°2142031
tpierron
Posté le 11-05-2012 à 18:07:39  profilanswer
 

Ha, ha, l'idée est bonne, mais ta fonction ImgLoader devrait sortir de cette fonction si pic == NULL. Dans le cas contraire, ça risque de planter par la suite (je ne me rapelle plus si les fonctions de la SDL sont NULL-safe, probablement non). Genre la ligne 15, je ferais un truc du genre :
 

Code :
  1. if (pic==NULL) {
  2.    fprintf(stderr,"Missing image %s : %s\n",file,IMG_GetError());
  3.    return NULL;
  4. }


 
Vérifie dans la console, si le message apparaît bien...
 
Edit: accessoirement la ligne "pic = SDL_DisplayFormat(pic);" provoque un memory-leak. Pas le drame, mais bon.

Message cité 1 fois
Message édité par tpierron le 11-05-2012 à 18:09:27
n°2142037
hb2012
Posté le 11-05-2012 à 18:39:16  profilanswer
 

tpierron a écrit :

Ha, ha, l'idée est bonne, mais ta fonction ImgLoader devrait sortir de cette fonction si pic == NULL. Dans le cas contraire, ça risque de planter par la suite (je ne me rapelle plus si les fonctions de la SDL sont NULL-safe, probablement non). Genre la ligne 15, je ferais un truc du genre :
 

Code :
  1. if (pic==NULL) {
  2.    fprintf(stderr,"Missing image %s : %s\n",file,IMG_GetError());
  3.    return NULL;
  4. }


 
Vérifie dans la console, si le message apparaît bien...
 
Edit: accessoirement la ligne "pic = SDL_DisplayFormat(pic);" provoque un memory-leak. Pas le drame, mais bon.


 
dsl M,apparemment j'ai bq de problème j'espère que suis trop lourd avec mes questions .l'erreur se dépasse mais il m'affiche une fenêtre noire et il m'écrit :

Code :
  1. 'sdlimg.exe' : Chargé 'C:\Program Files\WIDCOMM\Bluetooth Software\syswow64\BtMmHook.dll', Cannot find or open the PDB file

 .
je souhaite que vous trouvez ma faute car je suis vraiment debutant en langage c.

n°2142039
tpierron
Posté le 11-05-2012 à 19:42:13  profilanswer
 

hb2012 a écrit :


dsl M,apparemment j'ai bq de problème j'espère que suis trop lourd avec mes questions .l'erreur se dépasse mais il m'affiche une fenêtre noire et il m'écrit :

Code :
  1. 'sdlimg.exe' : Chargé 'C:\Program Files\WIDCOMM\Bluetooth Software\syswow64\BtMmHook.dll', Cannot find or open the PDB file

 .
je souhaite que vous trouvez ma faute car je suis vraiment debutant en langage c.


 
Ça n'a pas l'air d'une erreur, juste un message pour dire que les symboles de debug n'ont pas été trouvé pour cette DLL. DLL qui n'a à priori rien à voir avec ton problème.

n°2142057
hb2012
Posté le 12-05-2012 à 09:31:54  profilanswer
 

tpierron a écrit :


 
Ça n'a pas l'air d'une erreur, juste un message pour dire que les symboles de debug n'ont pas été trouvé pour cette DLL. DLL qui n'a à priori rien à voir avec ton problème.


bonjour M,
Mais quelle est la problème a votre avis de ne pas m'afficher ce que je veux le faire .
je viens de vous mettre en évidence de cible à notre sujet ,c'est à partir de ce site:
https://sites.google.com/site/sdlin [...] /sdl_image
vous pouvez m'aider à résoudre cette tache car elle d'importance capital chez moi, avec un facteur de temps très précieux.
si vous voulez M, et ça vous dérange pas bien sur ,c'est surement dépend de votre disponibilité.

n°2142066
gilou
Modérateur
Modzilla
Posté le 12-05-2012 à 11:07:19  profilanswer
 

Citation :

syswow64

Tu es en 64 bits? et tu as recompilé le source SDL auparavant? Parce que si tu compiles en 64 bits avec les DLL 32 bits, je suis pas sur que ça marche.
Par contre le source de SDL doit être recompilable en 64 bits depuis pas mal de temps.
A+,


Message édité par gilou le 12-05-2012 à 11:10:13

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  sdl et vc++2010

 

Sujets relatifs
Soucis VBA sur Excel 2010listes déroulantes liées sur access 2010
Cohabitation Excel 2003 et Excel 2010Exceution script VBA Excel 2010
Excel 2010 : activation macro[Resolu] Word 2010, ouvrir un fichier .doc et l'enregistrer en .pdf
intégrer .lib dans un projet C# (VS Express 2010)Connexion MySQL et Visual 2010 C++
Probleme compatibilité macro Excel 2003 -vers Excel 2010Access 2010 : générer un fichier xml
Plus de sujets relatifs à : sdl et vc++2010


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR