Erreur couleur pixel [Résolu]

Signaler
Messages postés
16
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
5 juillet 2007
-
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
-
Je cherche à récupérer les coordonnées et la couleur du pixel pointé par la souris, dans une simple console dos, sous Dev C++, mais j'ai les 2 messages d'erreur :

cannot convert `HWND__*' to `HDC__*' in assignment
cannot convert `HDC__*' to `HWND__*' for argument `1' to `HDC__*


int main (int argc, char *argv[])
{
// Déclarations locales
HDC hand;
POINT pt;
COLORREF Pix;
int R,G,B;
int y,x;

// Actions
do{
GetCursorPos(&pt);
hand = WindowFromPoint(pt); //<--------------1ere erreur
x = pt.x;
y = pt.y;
Pix = GetPixel(GetDC(hand), x, y);//<-----------2e erreur
R = GetRValue(Pix);//->valeur du rouge (0-255)
G = GetGValue(Pix);//->valeur du vert (0-255)
B = GetBValue(Pix);//->valeur du bleu (0-255)

cout << "x="<<x<<endl;
cout << "y="<<y<<endl;
cout << "R="<<R<<endl;
cout << "G="<<G<<endl;
cout << "B="<1);


// retour au sytème d'exploitattion
cout << endl;
system("pause");
return (0);
}

10 réponses

Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

L'erreur est très simple... remplace HDC hand par HWND hand !

En fait, Getwindowsfrompoint renvoi le handle de la fenetre et non pas celui du device context.

XbY
-----
Admin du projet PrintTemplate
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Tu fais : Projet -> Options du Projet -> Paramètres -> Editeur
de liens et voilà tu cherches le fichier libgdi32.a dans le dossier lib
de DevC++
if(!Meilleur("Joky")) return ERREUR;<
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Forcément, GetDC(hand) sur le bureau, te renvoi un Device Contexte,
"une zone où l'on peut dessiner", sur tout le bureau, donc l'origine
0,0 est en haut à gauche

Si tu utilise sur une fenetre, le Device Contexte sera exclusivement
sur la zone ou se trouve ta fenêtre, donc l'origine 0, 0 sera en haut à
gauche, mais de ta fenêtre, c'est pour ça qu'il existe une fonction

ClientToScreen(...);

et inversement ScreenToClient(...);

qui pour la première converti les coordonnées d'une zone client, en coordonnée "écran"

Et l'autre qui fait l'inverse ;)



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/cordspac_2tny.asp

if(!Meilleur("Joky")) return ERREUR;<
Messages postés
16
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
5 juillet 2007

Oui je n'ai plus les deux erreurs en effet mais un autre problème survient à la fabrication du .exe :



[Linker error] undefined reference to

C:\Dev-Cpp\Makefile.win [Build Error] [ess_cons.exe] Error 1



et donc rien n se passe... je comprends pas ce que veut dire ce `GetPixel@12'...
Messages postés
16
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
5 juillet 2007

Pardon, je rectifie :



Oui je n'ai plus les deux erreurs en effet mais un autre problème survient à la fabrication du .exe :



[Linker error] undefined reference to `GetPixel@12'...

C:\Dev-Cpp\Makefile.win [Build Error] [ess_cons.exe] Error 1



et donc rien n se passe... je comprends pas ce que veut dire ce `GetPixel@12'...
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Il faut ajouter Gdi32.lib dans les options du linker

On ne peut pas utiliser les fonctions gdi dans un programme console,
enfin si, mais ça n'a pas beaucoup de sens, donc voilà, faut linker

if(!Meilleur("Joky")) return ERREUR;<
Messages postés
16
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
5 juillet 2007

Avec Dev c++ je ne vois pas du tout comment on fait, je suis allé dans
"options du compilateur", puis sinon j'ai fait une recherche dans tous
les dossier de gdi32.lib et je ne trouve rien. Peut-être qu'avec ce
compilateur ça ne marche pas ainsi ?
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

on t'avai deja expliquer plus bas :)
moi meme :) il retoure en bas et tu a la reponse mais ajoute aussi la lib GDi32.lib comme te la preciser Joky.

bonne chance mais 2 fois exactement le meme topic :/
Messages postés
16
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
5 juillet 2007

Merci à vous trois, ça marche impec' !
Messages postés
16
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
5 juillet 2007

Le programme me donne bien la couleur du pixel pointé par la souris
quand je suis sur le bureau, mais quand j'ouvre une fenêtre, ça
correspond pas, j'ai l'impression que c'est décalé, ça me donne la
valeur du pixel environ 5 cm en dessous. Je pense que le problème vient
du fait que les coordonnées du pixel lui même par rapport à l'écran, ne
sont pas les même que celle de la fenêtre ou change pour une handle
donnée, c'est à dire quand je fais Pix = GetPixel(GetDC(hand), x, y),
on dirait que ça ne prend pas la même origine que quand je fais
GetCursorPos(&pt);

Savez vous ce que je dois rajouter ?