SDL_GetRGB (résolu)

SDL_GetRGB (résolu) - C - Programmation

Marsh Posté le 30-08-2009 à 18:53:55    

Bonjour, je ne comprend pas le premier paramètre de la fonction :  
 
                            void SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, Uint8 *r, Uint8 *g, Uint8 *b);
 
Je cherche à savoir comment initialiser "Uint32 pixel;", et aussi ce qu'est le deuxième paramètre (quelles valeurs mon pointeur peut-il prendre ?).
 
Merci


Message édité par Nykos728 le 01-09-2009 à 16:32:27
Reply

Marsh Posté le 30-08-2009 à 18:53:55   

Reply

Marsh Posté le 30-08-2009 à 19:36:46    

c'est une fonction pour récupérer les composantes R, G et B d'un pixel donné dans un format donné. En toute logique, tu vas utiliser ca sur un pixel d'une surface que tu connais. Dans ta structure de surface, tu devrais trouver le format qu'elle utilise, et une fois que tu as déterminé quel pixel tu voulais décomposer, tu le passes à cette fonction.


---------------
last.fm
Reply

Marsh Posté le 30-08-2009 à 19:42:13    

ok, mais je ne vois pas comment designer le pixel que je souhaite décomposer, je suppose que c'est avec Uint32 pixel (le premier paramètre), mais je ne comprend pas comment cela fonctionne :s
 
Merci quand même de m'avoir eclairé =)

Reply

Marsh Posté le 30-08-2009 à 21:21:31    

Voila mon code pour tester cette fonction :

Code :
  1. #include <iostream>
  2. #include <SDL.h>
  3. using namespace std;
  4. int main (int argc, char *argv[])
  5. {
  6.     Uint8 *r=NULL, *g=NULL, *b=NULL;
  7.     Uint32 pixel=64000;
  8.     SDL_PixelFormat *fmt=NULL;
  9.     // initialize SDL video
  10.     if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
  11.     {
  12.         printf( "Unable to init SDL: %s\n", SDL_GetError() );
  13.         return 1;
  14.     }
  15.     // make sure SDL cleans up before exit
  16.     atexit(SDL_Quit);
  17.     // create a new window
  18.     SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32,SDL_HWSURFACE|SDL_DOUBLEBUF);
  19.     if ( !screen )
  20.     {
  21.         printf("Unable to set 640x480 video: %s\n", SDL_GetError());
  22.         return 1;
  23.     }
  24.     bool done = false;
  25.     while (!done)
  26.     {
  27.         // message processing loop
  28.         SDL_Event event;
  29.         while (SDL_PollEvent(&event))
  30.         {
  31.             // check for messages
  32.             switch (event.type)
  33.             {
  34.                 // exit if the window is closed
  35.             case SDL_QUIT:
  36.                 done = true;
  37.                 break;
  38.                 // check for keypresses
  39.             case SDL_KEYDOWN:
  40.                 {
  41.                     // exit if ESCAPE is pressed
  42.                     if (event.key.keysym.sym == SDLK_ESCAPE)
  43.                         done = true;
  44.                     break;
  45.                 }
  46.             } // end switch
  47.         } // end of message processing
  48.         SDL_Flip(screen);
  49.     } // end main loop
  50.     SDL_GetRGB(pixel,fmt,r,g,b);
  51.     cout<<"format screen : "<<screen->format<<endl;
  52.     printf("R : %s\nG : %s\nB : %s\n",r,g,b);
  53.     cout<<"format : "<<fmt<<endl;
  54.     // all is well ;)
  55.     printf("Exited cleanly\n" );
  56.     return 0;
  57. }


 
Et quand je le lance lors de la fermeture du programme il ferme mais avec erreur : Process terminated with status 3 (0 minutes, 1 seconds)
Pourriez-vous m'expliquer ma ou mes erreurs svp.
 
Merci


Message édité par Nykos728 le 30-08-2009 à 21:29:09
Reply

Marsh Posté le 31-08-2009 à 00:20:11    

ligne 59, c'est tout faux
 
Edit : Ligne 57, tu passes fmt qui vaut NULL lorsque tu appelles SDL_GetRGB ... C'est toi qui est censé lui décrire le format du pixel à décomposer, donc il ne peut pas le deviner magiquement !


Message édité par theshockwave le 31-08-2009 à 02:41:19

---------------
last.fm
Reply

Marsh Posté le 01-09-2009 à 15:51:52    

a oui merci =)

Reply

Marsh Posté le 01-09-2009 à 16:13:43    

En plus j'avais oublié plein d'autre trucs (genre *r=??? et l'adresse du pixel) XD
 
Merci pour tout =)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed