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

njo80 Messages postés 9 Date d'inscription dimanche 13 juin 2004 Statut Membre Dernière intervention 11 décembre 2007 - 27 nov. 2007 à 15:11
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 - 29 nov. 2007 à 11:31
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

cs_Crepuscule3 Messages postés 24 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 25 novembre 2008
27 nov. 2007 à 16:58
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 nov. 2007 à 17:32
sur 256 bits, ouh la c'est le clavier qui s'est emballé...

ciao...
BruNews, MVP VC++
0
cs_Crepuscule3 Messages postés 24 Date d'inscription samedi 13 octobre 2007 Statut Membre Dernière intervention 25 novembre 2008
27 nov. 2007 à 17:38
Oui, pardon... 8 bits je voulais dire... soit 256 valeurs possibles...

Bonne soirée...

Crepuscule3
0
njo80 Messages postés 9 Date d'inscription dimanche 13 juin 2004 Statut Membre Dernière intervention 11 décembre 2007
27 nov. 2007 à 21:04
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 ?????
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 nov. 2007 à 21:22
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++
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 nov. 2007 à 21:41
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++ (@++)<!--
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
29 nov. 2007 à 11:31
0
Rejoignez-nous