Récupération de la couleur d'un pixel

Signaler
Messages postés
9
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
11 décembre 2007
-
Messages postés
336
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
-
Bonjour,

Je suis en train de créer un petit jeu style zelda (en light), j'ai affiché ma carte ainsi que mon sprite qui bouge.
Pour gérer la collision j'ai tiré un trait noir tout le long des endroit ou  le sprite n'a pas le droit d'aller.
Je dois donc vérifier la couleur du pixel de la map. Si le pixel est noir alors on ne peux pas bouger.

Problème : je ne sais pas comment récupérer la couleur du pixel.
Comment faire pour récupérer la couleur du pixel de mon image (à une coordonnée précise) et tester si c'est bien du noir !!!!

Merci de m'aider.

7 réponses

Messages postés
24
Date d'inscription
samedi 13 octobre 2007
Statut
Membre
Dernière intervention
25 novembre 2008

Salut,


   je suis novice dans ce domaine, mais j'ai déjà une petite
idée sur ton problème. Est-ce que ta map est en bitmap? Si oui, je te
conseil de regarder la source suivante:

http://www.cppfrance.com/codes/WIN32-LINUX-LIB-POUR-TRAVAILLER-IMAGES-BITMAPS_43299.aspx

Si je ne me trompe pas, il me semble qu'une image bitmap se récompose
en un tableau de pixels dont 3 valeurs correspondant au rouge(R),
vert(V) et bleu(B) leur sont associées. Chaque couleur est codée sur
256 bits. Donc si par exemple R = 255, V=255, B = 255 (maxi pour chaque
couleur), tu obtiendras un pixel blanc. Inversement si R, V, B = 0.

Ainsi, tu n'as qu'à faire pour chaque pixel un test sur R, V et B. Si
pour le pixel[i] tu as R = 0, V = 0, B = 0, alors le pixel[i] est noir.
Ainsi, suivant la taille de ton bitmap (de ta map), tu pourras définir
quels sont les pixels qui sont noir.


Voilà,


   j'espère que j'ai pu t'aider. Si ce n'est pas cela que tu
recherchais, je doute pouvoir t'aider d'avantage. C'est à peu près les
seuls choses que je connais en C++ car je travaille actuellement sur un
projet de traitement vidéo en temps réel.


Cordialement,


Crepuscule3
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
sur 256 bits, ouh la c'est le clavier qui s'est emballé...

ciao...
BruNews, MVP VC++
Messages postés
24
Date d'inscription
samedi 13 octobre 2007
Statut
Membre
Dernière intervention
25 novembre 2008

Oui, pardon... 8 bits je voulais dire... soit 256 valeurs possibles...

Bonne soirée...

Crepuscule3
Messages postés
9
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
11 décembre 2007

Le problème c'est que je fais ça en c et non en c++. Donc c'est un peu plus dur...
J'ai vu plusieurs idées sur le net dont bmp_getcolor  ou GetPixel et GetRValueG  GetGValue et GetBValue.

Mais rien ne marche.

Mon fenétre s'appelle ecran
ecran = SDL_SetVideoMode(1200, 800, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

et l'image que j'affiche imageDeFond :
imageDeFond = SDL_LoadBMP("map1.bmp");

Le type pixel n'existe pas en C (ou alors à ma connaissance) donc je ne sais vraiment pas comment faire pour recupérer les couleurs des pixels.

Alors en C on fait comment ?????
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
NON, le C est plus simple by design, aucun concept fumeux d'abstraction.

COLORREF GetPixel(
  HDC hdc,    // handle to DC
  int nXPos,  // x-coordinate of pixel
  int nYPos   // y-coordinate of pixel
);


Tu y vois un quelconque "type" pixel ? ça n'existe pas.
COLORREF est un simple DWORD.


Comment récupérer un HDC avec SDL, aucune idée, je ne pratique pas.

ciao...
BruNews, MVP VC++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Je ne sais pas si ça t'aidera mais tu peux jetter un coup d'oeil la dessus.
C'est pour setpixel mais le principe est probablement le même.
http://anomaly.developpez.com/tutoriel/sdl/partie1/#L4.1

C++ (@++)<!--
Messages postés
336
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2