Partage
  • Partager sur Facebook
  • Partager sur Twitter

Recuperer un pixel en SDL

    9 juin 2006 à 10:41:49

    Bonjour,

    Est-il possible en SDL d'afficher une image et de recuperer les comosantes RVB du pixel de coordonnée (x;y) par exemple ?
    • Partager sur Facebook
    • Partager sur Twitter
      9 juin 2006 à 11:49:39

      Merci beaucoup... mais pour l'instant je ne comprend pas tout alors je te dirais après si ca m'a aidé^^
      • Partager sur Facebook
      • Partager sur Twitter
        9 juin 2006 à 11:56:13

        C'est du C++
        Voici une solution en C:
        Uint32 getpixel(SDL_Surface *surface, int x, int y)
        {
            int bpp = surface->format->BytesPerPixel;
            /* Here p is the address to the pixel we want to retrieve */
            Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

            switch(bpp) {
            case 1:
                return *p;

            case 2:
                return *(Uint16 *)p;

            case 3:
                if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
                    return p[0] << 16 | p[1] << 8 | p[2];
                else
                    return p[0] | p[1] << 8 | p[2] << 16;

            case 4:
                return *(Uint32 *)p;

            default:
                return 0;       /* shouldn't happen, but avoids warnings */
            }
        }


        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2006 à 12:02:12

          Euh, merci mais :
          - ou indique t-on les coordonée du pixel que l'on veut recuperer ?
          - dans quelle(s) variable(s) sont les valeurs RVB du pixel en question ?
          • Partager sur Facebook
          • Partager sur Twitter
            9 juin 2006 à 12:07:06

            Le prototype est assez clair je pense:
            Uint32 getpixel(SDL_Surface *surface, int x, int y)

            Tu rentre la surface dans laquelle tu veux récupérer le pixel, les coordonnées de ce pixel, et la fonction retourne le couleur dans un Uint32.
            • Partager sur Facebook
            • Partager sur Twitter
              9 juin 2006 à 12:20:46

              Voila ma version :
              /* Tirée du Wiki officielle */
              Uint32 getpixel(SDL_Surface *surface,int x,int y)
              {
                  int bpp = surface->format->BytesPerPixel;
                  /* Here p is the address to the pixel we want to retrieve */
                  Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

                  switch(bpp) {
                  case 1:
                      return *p;

                  case 2:
                      return *(Uint16 *)p;

                  case 3:
                      if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
                          return p[0] << 16 | p[1] << 8 | p[2];
                      else
                          return p[0] | p[1] << 8 | p[2] << 16;

                  case 4:
                      return *(Uint32 *)p;

                  default:
                      return 0;       /* shouldn't happen, but avoids warnings */
                  }
              }

              void GetPixelColor(SDL_Surface * surface,int x,int y,Uint8 *r,Uint8 *g,Uint8 *b)
              {
                  SDL_GetRGB(getpixel(surface,x,y),surface->format,r,g,b);
              }
              • Partager sur Facebook
              • Partager sur Twitter
                9 juin 2006 à 13:15:26

                Il a rajoué la fonction GetPixelColor pour convertir le Uint32 en trois Uint8 (un par couleur)
                • Partager sur Facebook
                • Partager sur Twitter
                  9 juin 2006 à 13:24:03

                  Okay, j'ai compris maintenant ! Merci a tous et désolé de ne pas avoir pensé a regarder les tutos déja présent sur le site...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juin 2006 à 18:07:35

                    Citation : Orochi

                    Il a rajoué la fonction GetPixelColor pour convertir le Uint32 en trois Uint8 (un par couleur)



                    Ok, j'avais pas "scrollé" jusq'au bas de son code (j'ai modifié le css du site via Firefox pour mettre un overflow sur les bouts de code du forum)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 juin 2006 à 18:32:07

                      Oui hein, je m'approprie pas le code des autres quand même :S (encore que j'aurais pu avoir écrit cette page du wiki ;-)
                      Je rajoute un p'tit commentaire.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Recuperer un pixel en 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