Connaitre la couleur d un pixel sous windows

cs_vychnou Messages postés 124 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 11 mai 2009 - 14 janv. 2004 à 00:10
thunderx Messages postés 13 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 21 septembre 2006 - 24 mars 2004 à 15:50
Bonjour a tous!
Mon probleme:
j ai besoin de connaitre la couleur d un pixel particulier(par exemple celui pointé par la souris ou bien un pixel dont on a definit les coordonnees)et ..... je ne sais pas comment faire :D
en delphi j ais trouvé ce squelette de prog sur le net:
"var
Pos: TPoint;
Couleur:TColor;
begin
GetCursorPos(Pos);
Couleur := DesktopColor(Pos.X, Pos.Y);"[i/]

mais je comprends moyennement le delphi.

pourtant la fonction [i]DesktopColor(...,..) me conviendrait parfaitement..
existe il une telle fonction dans windows.h ?

comment recuperer une couleur exactement?(une classe couleur?3valeurs renvoyées suivant les teintes?)

un badeau se sent il l ame de me répondre?
merci d avance ! ;)

14 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 janv. 2004 à 09:14
GetPixel
BruNews, ciao...
0
cs_vychnou Messages postés 124 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 11 mai 2009 18
14 janv. 2004 à 11:44
j ai essayé la fonction GetPixel de cette maniere:

#include "windows.h"
#include <conio.h>

int main()
{ int R,G,B;
HDC ScreenSrc;
ScreenSrc = GetWindowDC(0);
pix = GetPixel(ScreenSrc, 512 , 384 );
R = GetRValue(pix);//->valeur du rouge (0-255)
G = GetGValue(pix);//->valeur du vert (0-255)
B = GetBValue(pix);//->valeur du bleu (0-255)
}

Réponse du compilateur(ou plus exactement de l editeur de lien) :
[linker error]undefined reference to 'GetPixel@12'

j utilise dev-cpp comme environnement de travail..
es ce que j ai oublié quelque chose? dans les options du lieur?
Dans les inclusions?
Merci quand meme :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 janv. 2004 à 13:36
sur VC++ <windows.h> suffit.
autrement voir MSDN.
BruNews, ciao...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 janv. 2004 à 13:40
A priori BruNews ce n'est un problème d'en-tête mais pultot de lib
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
14 janv. 2004 à 13:42
Au fait on n'écrit pas #include "windows.h" mais #include<windows.h>
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
15 janv. 2004 à 00:42
les deux peuvent s'ecrire vecchio, avec les guillemets il va chercher le header a un chemin donner, a partir du dossier de travail en cours, mais cela n'empeche pas le preprocesseur d'aller chercher le fichier dans ses dossiers systemes s'il ne l'as pas trouver

"j utilise dev-cpp comme environnement de travail..
es ce que j ai oublié quelque chose?"

oui, tu as oublier d'utiliser Visual Studio :D
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 janv. 2004 à 00:49
Encore une perle, c'est la soiree. Je vais finir par en faire un bouquin.
BruNews, ciao...
0
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
15 janv. 2004 à 00:59
lol, j'avoue qu'elle etais facile :)
Nix, met moi -2 stp, je suis sport :P
0
cs_vychnou Messages postés 124 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 11 mai 2009 18
15 janv. 2004 à 08:42
Pour ce qui est de VC++,j ai eu des echos comme quoi ca n était pas tres performant, trop formaté.
Il faudrait que j essaie pour me faire une opinion.

Bon pour mon probleme, je me suis débrouillé en trouvant la dll qui manquait (gdi32) et en bidouillant un peu je l ai mise dans les options de liage donc ... tout marche maintenant...
je suis confronté à un probleme bien plus embetant:

la lenteur de la fonction GetPixel(...) !!!
(déja sujet d un message qui n avait pas eu de succes)

une boucle de quelques lignes (une dizaine),utilisant la fonction GetPixel pour verifier le pixel central de l ecran aura une vitesse de parcour de 0.5 ms sur mon 1.50Ghz(ca me parait dingue en fait),c est pas possible que ce soit si lent..),et entraine par ailleurs une forte utilisation de l uc si je n inclut pas de Sleep(1) dans chaque boucle...

Personne ne connait d alternative a cette *$"#* de fonction? :big)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 janv. 2004 à 09:14
La lenteur de GePixel() est 'normale' si on considere ce qu'elle implique comme acces memoire.
Si tu as beaucoup de lignes a balayer, remplace en faisant une 'photo' bimap en 1 passe et tu pourras te servir de GetDIBits bien + rapide. Tu vois MSDN pour details.
BruNews, ciao...
0
cs_vychnou Messages postés 124 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 11 mai 2009 18
15 janv. 2004 à 13:12
"oups" je n'ai pas précisé : je n'ai qu'un pixel à vérifier dans ma boucle :big)

Voici la boucle incriminée:
while (*pasEncoreTrouvéDeConditionDeSortie :big) *)
{
pix = GetPixel(ScreenSrc, 512 , 384 );
R = GetRValue(pix);//->valeur du rouge (0-255)
V = GetGValue(pix);//->valeur du vert (0-255)
B = GetBValue(pix);//->valeur du bleu (0-255)

SetPixel(ScreenSrc, 512 , 384 , pix2);
if ( (R<=RMAX&&R>=RMIN) && (V<=VMAX&&V>=VMIN) && (B<=BMAX&&B>=BMIN) )
{
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Sleep(15);//temps pendant lequel la souris reste "appuyée"
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
Sleep(3);//interval entre deux checks
cpt++;
}

Je voudrais comme condition de sortie la pression d'une touche particulière mais je voit mal comment faire....(un getch peut être? mais placé a quel endroit ?

Si quelqun trouve des alternatives interessantes à une partie de cette boucle,je suis preneur, n'hésitez pas a critiquer tout ce qui pourra ameliorer sa vitesse d'éxecution sera le bienvenue :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 janv. 2004 à 13:20
getch ? mais c'est pour les CONSOLEries.
WM_KEYDOWN pour la pression d'une touche clavier.
Et abandonne la console a moins que tu ne developpes un compilo.
BruNews, ciao...
0
cs_vychnou Messages postés 124 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 11 mai 2009 18
15 janv. 2004 à 13:42
Non non, ce programme utilise les api windows... il est pas sur console...mais de toute facon il ne se manifeste pas, c'est juste une tache de fond(notez quand meme qu'à 90%de l'uc utilisée sans Sleep ca fait une sacrée tache de fond :approve) )...
Alors aucune idee d'amélioration ?
On pourrait pas utiliser une interruption périphérique pour connaitre la couleur du pixel central? :/
parce qu'une des contraintes c'est que le programme n analyse pas une image fixe mais une image rafraichie 60 fois par seconde ...
0
thunderx Messages postés 13 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 21 septembre 2006
24 mars 2004 à 15:50
LOL !

Toi tu serais pas entrain de faire un auto fire ?

:big)
0
Rejoignez-nous