IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Couleur d'un pixel


Sujet :

SDL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Couleur d'un pixel
    Bonjour à tous,

    Dans la faq SDL on dit comment savoir la couleur du pixel(0, 0) d'une s'urface.
    Comment faire pour obtenir la couleur du pixel(5, 5) par exemple?
    merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu remplaces les 0 par des 5 ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Bah non!
    regarde:
    Uint8 r, g, b;

    /* Récupère la valeur RGB du premier pixel (0, 0) d'une surface */
    SDL_GetRGB((Uint8)Surf->pixels, Surf->format, &r, &g, &b);

    printf("Couleur : rouge = %i, vert = %i, bleu = %i", r, g, b);
    Qu'es qu'on fais pour avoir le pixel(5, 5)?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ah oui, désolé je n'avais pas réussi à retrouver la question dans la FAQ. Je pense même qu'elle est erronnée, faudra voir ça.

    Essaye ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Uint8 *p = (Uint8*)Surface->pixels + y * Surface->pitch + x * Surface->format->BytesPerPixel;
     
    /* p Pointe sur le pixel (x, y) */
     
    SDL_GetRGB(*(Uint32*)p, Surface->format, &r, &g, &b);

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Je vais voir si ca marche ce soir(je par à jumiège )
    mais bon ca ma l'air de marcher a mon avis.
    merci

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Et pour avoir un pixel (i,j), on doit utiliser une fonction getPixel faite à la main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inline int getPixel(int i, int j, int bytesperPix, int pitch)
    {
    	return i*pitch + j*bytesperPix;
    }
    Ce qui donnerait ceci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Uint8 r, g, b;
    Uint32 *mespixels;
    Uint32 *mespixels = (Uint32*) ((Uint8*) o->pixels + getPixel(75,122,
                                     Surf->format->BytesPerPixel,Surf->pitch));
     
    /* Récupère la valeur RGB du premier pixel (0, 0) d'une surface */
    SDL_GetRGB(*mespixels, Surf->format, &r, &g, &b);
     
    printf("Le pixel (5,5) a une couleur : rouge = %i, vert = %i, bleu = %i", 
                     r, g, b);
    Jc

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    J'utilisais parfois cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    /* on définit un type couleur*/
     
    typedef struct _CouleurRGB_
    {
     Uint8 r;
     Uint8 g;
     Uint8 b;      
    } _Couleur_;
     
    /* Lit la couleur en Uint32 (c'est peut être ce que tu veux)*/
    Uint32 SDL_LireCouleurAux(SDL_Surface* surface, int x, int y)
    {
      int bpp = surface->format->BytesPerPixel;
     
      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;
      }        
    }
     
     
    /* Lit la couleur dans mon format, utile pour faire des manipulations sur les couleurs*/
    _Couleur_ SDL_LireCouleur(SDL_Surface * surface, int x, int y)
    {
     _Couleur_ couleur;
     
     SDL_GetRGB(SDL_LireCouleurAux(surface, x, y), surface->format, 
                                          (Uint8*)   &couleur.r, (Uint8*) &couleur.g, (Uint8*) &couleur.b);
     return couleur;
     
     
    }
    Je ne répondrai à aucune question technique en privé

Discussions similaires

  1. [VB.NET]Comment recupérer la couleur d'un pixel de l'Ecran ?
    Par cyrcroix dans le forum Windows Forms
    Réponses: 24
    Dernier message: 07/11/2007, 11h35
  2. Réponses: 1
    Dernier message: 26/03/2005, 13h31
  3. [TBitmap] Recuperer la couleur d un pixel
    Par DamessS dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/12/2004, 09h47
  4. [VB6] Comment récupérer la couleur d'un pixel de l'écran?
    Par Taurëndil dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 26/03/2004, 09h02
  5. Obtenir la couleur d'un pixel
    Par GLDavid dans le forum OpenGL
    Réponses: 2
    Dernier message: 09/03/2004, 19h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo