begin process at 2012 05 30 08:36:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Graphique

 > 

[SDL] Obtenir la couleur d'un pixel dans une SDL_Surface


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

vendredi 1 avril 2005 à 22:05:45 | [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

Rouliann

Membre Club
Bonjour tout le monde!
Voilà je cherche une fonction capable de lire la couleur d'un pixel dans une SDL_Surface, j'ai cherché dans SDL_video.h mais rien qui ressemble à SDL_GetPixelColor...
Svp aidez moi! :(

____________________
**Rouliann**
Life is short, program more!
samedi 2 avril 2005 à 09:21:32 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

Rouliann

Membre Club
Ou peut-être y a-t-il une méthode possible sans utiliser la SDL...

____________________
**Rouliann**
Life is short, program more!
vendredi 8 avril 2005 à 22:49:17 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

licorna

Membre Club
     Pour récupérer la couleur d'un pixel d'une surface, il suffit d'utiliser la fonction :

void SDL_GetRGB(Uint32 pixel, SDL_PixelFormat *fmt, Uint8 *r, Uint8 *g, Uint8 *b);

   Elle place dans les pointeurs correspondants la valeur des 3 composantes du pixel spécifié. fmt doit être un pointeur sur le champ "format" ta SDL_Surface.




samedi 9 avril 2005 à 08:16:17 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

Rouliann

Membre Club
Et le "pixel" ? j'ai vu un exemple de cette fonction mais elle ne récupérai que la couleur du premier pixel mais pour moi l'idéal aurait été d'avoir une boucle de ce style :
   for(y=0; y<surface->h; y++)
   {
      for(x=0; x<surface->w; x++)
      {
         //récupération des 3 composantes de couleur aux coord x et y
      }
   }

Est-ce que tu sais si c'est possible et si oui, comment fait-on ?

En tout cas merci d'avoir répondu j'étais désespéré! lol

____________________
**Rouliann**
Life is short, program more!
samedi 9 avril 2005 à 10:21:14 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

licorna

Membre Club
     Ce que tu veux faire est tout à fait possible avec une boucle semblable à celle-ci :

for(pixel=0; pixel<(surface->w)*(surface->h); pixel++)
       SDL_GetRGB(pixel,surface->format,&r,&g,&b);

   Cependant, l'exécution d'une telle boucle pour la récupération de tous les pixels d'une surface risque de s'avérer lent. Tu peux donc directement récupérer la couleur des pixels de la surface en allant tout chercher dans la SDL_Surface elle-même : en effet,
surface->pixels te donnera un pointeur de type *void sur les données relatives à la couleur de tous les pixels de la surface (stockées de manière séquentielle, cf. documentation de la SDL).
     Attention, avant de pouvoir accéder au champ "pixels" de la SDL_Surface, celle-ci doit avoir été vérouillée ave la fonction :

SDL_LockSurface
(SDL_Surface *surface)
     Tu devras ensuite la dévérouiller avec :
SDL_UnlockSurface(SDL_Surface *surface)


samedi 9 avril 2005 à 10:29:16 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

Rouliann

Membre Club
bin ca revien au meme si les données sont stockées de manière séquentielle non? il faudrai faire :

int pixel = surface->pixel;

et incrémenter pixel jusqu'au point spécifique dont je veux la couleur...

____________________
**Rouliann**
Life is short, program more!
samedi 9 avril 2005 à 11:19:24 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

licorna

Membre Club
     Non, je pense que tu n'as pas compris, ou que je me suis mal exprimé : l'argument "pixel" de la fonction SDL_GetRGB est un n° de pixel de la surface (compris entre 0 et (w*h)-1 ) alors que le champ "pixels" (avec un 's') de la structure SDL_Surface est un pointeur sur les données relatives aux pixels d'une surface : autrement dit, il s'agit là de l'adresse en mémoire de ces données.
     Les 2 solutions que je t'ai donné plus haut sont donc totalement différentes :
     - une fait appel à une fonction de renvoi de la couleur spécifique;
     - l'autre permet simplement d'accéder aux données présentes en mémoire.


samedi 9 avril 2005 à 11:22:20 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

Rouliann

Membre Club
Hum... je saisis pas encore complètement... Comment on fait pour avoir la couleur du pixel se trouvant en (5,10) par exemple ?

____________________
**Rouliann**
Life is short, program more!
samedi 9 avril 2005 à 12:17:45 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

licorna

Membre Club
Réponse acceptée !
   Pour récupérer la couleur du pixel (5,10), tu as les 2 manières :
1) Tu peux utiliser la fonction dédiée :

Uint8 r, g, b;

SDL_GetRGB(5*surface->w+(10+1), surface->format, &r, &g, &b);

2) Tu peux lire directement les données de la surface :

SDL_LockSurface(surface);  // Vérouillage de la surface
Uint8* pPixels = surface->pixels;  // Récupération d'un pointeur vers les pixels de la surface
Uint8 r, g, b;    // Variables servant à stocker la couleur du pixel choisi
r = *(pPixels+4*(5*surface->w+(10+1));
g = *(pPixels+4*(5*surface->w+(10+1))+1);
b = *(pPixels+4*(5*surface->w+(10+1))+2);
SDL_UnlockSurface(surface); //Dévérouillage de la surface

   
Ainsi, il faut bien comprendre qu'un pixel codé sur 32 bits est en fait représenté sous forme d'un paquet de 4 octets en mémoire.
    Dans ces 2 exemples, surface->w est la largeur de la surface en pixels. De plus, dans le 2°, r, g et b sont récupérées en prenant la valeur inscrite dans l'adresse en mémoire de chaque composante (dans cet exemple, j'ai pris le cas d'une surface où les pixels sont codés sur 32 bits, d'où le "4*" survenant dans le code).
   J'espère que ça t'auras éclairé.








samedi 9 avril 2005 à 13:49:04 | Re : [SDL] Obtenir la couleur d'un pixel dans une SDL_Surface

Rouliann

Membre Club
Merci beaucoup je vais tester ça dans la journée et je reviendrais te dire si ça marche! ;)
En tout cas merci!!!

____________________
**Rouliann**
Life is short, program more!

1 2

Cette discussion est classée dans : couleur, pixel, obtenir, sdl, surface


Répondre à ce message

Sujets en rapport avec ce message

Problème fenêtre SDL sous Linux [ par Neofabiensama ] Bonjour,Je poste aujourd'hui car je suis à cours d'idée sur un problème de fenêtre SDL. Je travaille actuellement sur un projet de visualisation 2D d' pb avec pointeur triple [ par snake57 ] Bonjour, j'ai essayé de passer par les pointeurs triples, mais j'arrive pas a allouer, la compilation ne passe pas, pouvez vous m'aider svp? Voici Bitmap et pixel [ par wxccxw ] Bonsoir, quelqu'un connaiterait-il la facon dont il faut s'y prendre pour charger un BMP de 320*240 et recuperer la couleur en R G B (0 a 255) de c Histoire de pixels et de points [ par elflink ] Jamais les pixels n'ont connu de tels points.car les pixels sont des pixels,et les points des points.Mais à connaitre la couleur d'un points, autant c Récupération d'une couleur d'un pixel d'un canevas [ par bretgod ] Bonjour, Je travaille sous Borland Builder C++, et je cherche à récupérer la valeur du dernier  pixel RGB (coin inférieur droit )d'un canvas(ou g insé Récupération de la couleur d'un pixel [ par jemac ] Je cherche une fonction permettant de récupéré la couleur d'un pixel en donnant en paramétre les coordonnées de ce pixel. Comme le fait glSetPixel( Couleur d'un Pixel et dessin [ par wxccxw ] Bonjour,je suis en train de faire un colorimètre numérique, et lorsque que je recupere la couleur des pixels a la place de mon pointeur j'obtien toujo [Visual C++] Couleur d'un pixel [ par kesakoa ] Bonjour.Je veux automatiser des taches suivant ce que l'écran affiche : j'ai besoin de pouvoir tester la couleur de certains pixels de l'écran. (je ne Couleur d'un pixel / Hotkey fonctions [ par Derto ] Bonjours. Quelqu'un aurait t'il la solution pour appeler une fonction grace à une touche de raccourci ? Et j'aimerai aussi savoir si il existe une f Couleur d'un pixel api win [ par Derto ] <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: -webkit-monospace; font-size: 13px; font-style: nor


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales