Rechercher une Pixel dans l'ecran courant

cs_foyfinou Messages postés 9 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 20 juillet 2008 - 16 juil. 2008 à 15:08
cs_foyfinou Messages postés 9 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 20 juillet 2008 - 16 juil. 2008 à 20:43
Bonjour,

Je voudrai developper une appli qui devra chercher la position de toutes les pixels rouges par exemple, dans l'écran courrant.
J'ai deja avancer en utilisant GetPixel() mais j'ai rencontré des difficultés :

- GetPixel assez lent apperement et je n'ai pas trouvé de tuto très detaillé quand à l'utilisation de GetDIBits et je n'ai pas su l'utiliser.
- Ma fonction de 'recherche' est en fait un GetPixel(x,y) avec x et y des nombres aleatoires dans des intervales. Je recherche une 'fonction' plus performante que celle la..

Si quelqu'un peut m'apporter son aide pour un des deux problemes,  qu'il n'hésite pas!

Foyfinou.

7 réponses

thorodin Messages postés 22 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 5 mai 2009
16 juil. 2008 à 16:01
Pourquoi est ce que tu ne parcoures pas toute l'image avec deux boucles for?
tu pourrais utiliser
GetBitmapDimensionEx pour connaitre les dimensions puis comparer
avec le rouge 255 0 0 pour COLORREF
0
thorodin Messages postés 22 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 5 mai 2009
16 juil. 2008 à 16:26
sinon j'ai trouvé un exemple d'utilisation de GetDIBits sur un projet de ce site

http://www.cppfrance.com/codes/GET-SETDIBITS_38788.aspx
0
cs_foyfinou Messages postés 9 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 20 juillet 2008
16 juil. 2008 à 16:31
En fait, je recherche les pixel de couleur rouge mais seulement au centre de l'écran, dans un carré de 400 pixel a peu près.
Au début, je faisait bien 2 boucles for imbriquées mais au final je me suis dit que la recherche serait surment plus fructueuse en recherchant aléatoirement dans ce carré.
les valeurs de x vont de 312 à 712 et y de 184 à 584.
0
cs_foyfinou Messages postés 9 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 20 juillet 2008
16 juil. 2008 à 16:33
Oui je l'avai aussi trouvé mais je n'ai pas réussi ni à bien comprendre, ni  a réutiliser ce code. ^^
0

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

Posez votre question
thorodin Messages postés 22 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 5 mai 2009
16 juil. 2008 à 16:54
tu peux être plus rapide en prenant un pixel sur deux voire un sur quatre, ça veut dire
quoi aléatoirement?
0
thorodin Messages postés 22 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 5 mai 2009
16 juil. 2008 à 17:23
C quoi comme image que tu manipules est ce que tu as des pixels qui sont rouges exactement c'est à dire 255 0 0 ou tu réalises un test  du style R>(G+B) pour trouver
des valeurs qui se rapprochent du rouge???
0
cs_foyfinou Messages postés 9 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 20 juillet 2008
16 juil. 2008 à 20:43
En fait ce que je cherche ce sont des caracteres rouges.
Je vais mettre mon code ce sera plus simple... mais il y a une erreur que je ne trouve pas lol ^^ : la couleur retournée est toujours 255,255,255... :

#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>

int main (void)
{
    HWND hwnd = GetDesktopWindow();      
    HDC hdc;
    hdc = GetDC(hwnd);
    long redValue, greenValue, blueValue;
   
    COLORREF color;
    POINT p;
    GetCursorPos(&p);

    int PixelX=p.x-150;
    int PixelY=p.y-150;
    float test=0;
       
    while (PixelY250&&greenValue<30&&blueValue<30)
            {
               //printf("Pixel rouge à : x : %i  et y : %i \n Valeur : R=%i G=%i B=%i\n",PixelX,PixelY,redValue,greenValue,blueValue); 
               SetCursorPos(PixelX,PixelY);
               mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
               mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
               Sleep(5000);             
            }
            PixelX=PixelX+5;  
           
        }
       
        if (PixelY>p.y+130)
        {
           GetCursorPos(&p);
           PixelY=p.y-150;
        }
        PixelY=PixelY+5;
        getch();
    }
    system("PAUSE");    
}
0
Rejoignez-nous