Partage
  • Partager sur Facebook
  • Partager sur Twitter

Recuperer le RGB d'un pixel avec SDL

euuh...j'ai un peu de mal

    22 novembre 2007 à 15:54:24

    Salut tout le mondee !

    Bon voila, il se trouve que pour un devoir, je dois recupérer le RGB de chaque pixel d'une image, or je ne vois pas vraiment comment faire.

    J'ai bien pensé a utiliser SDL_GetRGB() mais je ne vois pas comment recuperer les données pour CHAQUE pixel de l'image.

    Si quelqu'un peut éclairer ma lanterne, je suis preneur. Merci d'avance =}
    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2007 à 16:09:16

      regarde mon tuto (cf ma signature §2.3. Acces aux pixels)
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        22 novembre 2007 à 16:25:33

        Bon si j'ai bien compris, il faut d'abord que je fasse un GetPixel sur chaque pixel de mon image, puis ensuite faire un SDL_GetRGB ( ou SDL_GetRGBA ) pour chacun de ces pixels ?

        • Partager sur Facebook
        • Partager sur Twitter
          22 novembre 2007 à 16:29:56

          le getpixel te renvoie un long : (4 octets) qui contient le RGBA : il faut que tu le décomposes octets par octets pour avoir le R, le G, le B, le A :)

          Et tu le fais pour tous les pixels dont tu as besoin !

          n'oublie pas de charger l'image en RAM (et non en VRAM), ou alors, si c'est en VRAM, d'utiliser SDL_LockSurface.
          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            22 novembre 2007 à 16:37:28

            Humm la j'ai un gros doute lol :

            Comment faire pour le décomposer en 4 pixel ? o_O

            Un peu plus d'expliquations sur la manip serait le bienvenue.
            • Partager sur Facebook
            • Partager sur Twitter
              22 novembre 2007 à 17:00:15

              1. long lepixel;
              2. char* tab = (char*)&lepixel;
              3. char r = tab[0];
              4. char g = tab[1];
              5. char b = tab[2];
              6. char a = tab[3];


              EDIT : peut etre que ce ne sera pas rgba, mais bgra, argb ... a toi de tester l'ordre...
              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                22 novembre 2007 à 19:00:35

                Voila ce que j'ai fait :

                J'ai choisi un fichier .ico en 32*32 pour les test, mais j'ai un probleme.

                Voila, la fenetre s'ouvre et se ferme a la vitesse de la lumiere ( c'est fait exprès ), et DEVRAIT ensuite faire un printf ( donc sur la console ) avec le RGBA de chaque pixel, or il ne fait pas le printf.

                J'aimerais savoir si quelqu'un sait pourquoi o_O

                Voici le code :

                1. int main(int argc, char *argv[])
                2. {
                3.     SDL_Init ( SDL_INIT_VIDEO );
                4.     SDL_Surface* photo = NULL;
                5.     photo = SDL_LoadBMP("ico.bmp");
                6.     long x,y,i,a = 0;
                7.     long tr[32],tb[32],tg[32],ta[32];
                8.     char pixel[32];
                9.     SDL_Surface* ecran = SDL_SetVideoMode(32,32,32,SDL_HWSURFACE | SDL_NOFRAME);
                10.     SDL_Rect position;
                11.     position.x = 0;
                12.     position.y = 0;
                13.     SDL_BlitSurface(photo,NULL,ecran,&position);
                14.     SDL_Flip(ecran);
                15.     SDL_LockSurface(photo);
                16.     while ( x <= 32 && y <= 32 )
                17.     {
                18.         pixel[a] = GetPixel(photo,x,y);
                19.         x++;
                20.         y++;
                21.         a++;
                22.     }
                23.     SDL_UnlockSurface(photo);
                24.     while (i < 32)
                25.     {
                26.         char* tab = (char*)&pixel[i];
                27.         tr[i] = tab[0];
                28.         tg[i] = tab[1];
                29.         tb[i] = tab[2];
                30.         ta[i] = tab[3];
                31.         i++;
                32.     }
                33.     SDL_Quit();
                34.     long j = 0;
                35.     while ( j < 32 )
                36.     {
                37.         printf("Pour le pixel %d :\nR = %d\nG = %d\nB = %d\nA = %d\n",j,tr[j],tg[j],tb[j],ta[j]);
                38.         j++;
                39.     }
                40.     return 0;
                41. }
                • Partager sur Facebook
                • Partager sur Twitter

                Recuperer le RGB d'un pixel avec SDL

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown