Erreur couleur pixel

Résolu
djtef Messages postés 16 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 juillet 2007 - 9 févr. 2006 à 13:43
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 9 févr. 2006 à 16:46
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

sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
9 févr. 2006 à 14:16
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
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
9 févr. 2006 à 15:11
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;<
3
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
9 févr. 2006 à 16:46
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;<
3
djtef Messages postés 16 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 juillet 2007
9 févr. 2006 à 14:42
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'...
0

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

Posez votre question
djtef Messages postés 16 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 juillet 2007
9 févr. 2006 à 14:44
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'...
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
9 févr. 2006 à 14:49
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;<
0
djtef Messages postés 16 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 juillet 2007
9 févr. 2006 à 15:02
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 ?
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
9 févr. 2006 à 15:09
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 :/
0
djtef Messages postés 16 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 juillet 2007
9 févr. 2006 à 15:27
Merci à vous trois, ça marche impec' !
0
djtef Messages postés 16 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 5 juillet 2007
9 févr. 2006 à 16:25
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 ?
0
Rejoignez-nous