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
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
Tu remplaces les 0 par des 5 ?
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Bah non!
regarde:
Qu'es qu'on fais pour avoir le pixel(5, 5)?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);
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);
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Je vais voir si ca marche ce soir(je par à jumiège )
mais bon ca ma l'air de marcher a mon avis.
merci
Et pour avoir un pixel (i,j), on doit utiliser une fonction getPixel faite à la main :
Ce qui donnerait ceci par exemple :
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; }
Jc
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);
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é
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager