Couleur de pixel C sous Windows

Signaler
Messages postés
6
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
11 novembre 2007
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour,

Je tente de tester la couleur de pixels sur quelques points de l'écran. Mais mon compte donne pas l'effet escompté : il se compile, il tourne, mais m'indique à chaque fois que la couleur demandé est 0,0,0 (R,G,B). Bien entendu, j'ai vérifié que ce n'était pas le cas et qu'il aurait du m'indiquer une couleur. Par contre, il m'indique bien la résolution d'affichage.

Les lib sont configurés dans le compilateur directement. J'ai bien indiqué celle pour getPixel(). Le sleep() me permet d'avoir le temps d'ouvrir l'application de mon choix pour faire le test : idéalement, je voudrais que cela fonctionne avec un jeu vidéo.

Je souhaite faire mon programme en C sous Windows. J'ai lu des articles qui se rapproche de ce que je souhaite faire, mais malgré cela, je n'ai pas trouvé la solution à mon problème, le code semble correct.

Voici le code :
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <conio.h>
#include
#include <errno.h>
#include <strings.h>
#include
#include <winsock.h>

int main(int argc, char * argv[])
{
    int R,G,B;
    Sleep(10000);
    HWND hFore = GetForegroundWindow();

    HDC ScreenSrc;
    ScreenSrc = GetDC(NULL); 
   
    if (ScreenSrc == NULL)
    {
        printf("erreur\n");
    }
    else {
        COLORREF Pix;
        Pix = GetPixel(ScreenSrc, 100, 100);
        R = GetRValue(Pix);//->valeur du rouge (0-255)
        G = GetGValue(Pix);//->valeur du vert (0-255)
        B = GetBValue(Pix);//->valeur du bleu (0-255)
        printf("%i,%i,%i\n", R,G,B);
       
        int ScreenX = GetDeviceCaps(ScreenSrc, HORZRES);
        int ScreenY = GetDeviceCaps(ScreenSrc, VERTRES);
        B = GetBValue(Pix);//->valeur du bleu (0-255)
        printf("%i,%i\n", ScreenX, ScreenY);
    }

   system("pause");

     return 0;
}

Je remercie d'avance ceux qui m'aideront dans la résolution de ce problème.

5 réponses

Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
bien pourquoi es-tu en mode console tu peux pas comme cela dessiner un pixel en mode console . si tu veux faire un jeux creer une application windows avec winmain et createwindowsex
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,


Dans l'aide, il est précisé que GetPixel ne fonctionne pas sur tous les contextes de périph.

Tu peux voir s'il le supporte avec GetDeviceCaps.

M'enfin c'est curieux quand même...


Sinon, il y a BitBlt
qui est utilisé pour tout ce qui est impression d'écrans. Tu peux par
exemple t'en servir pour récupérer un zone de l'écran dans ta bitmap et
accèder à la couleur par la suite.

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
Messages postés
6
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
11 novembre 2007

Au sujet de mon mode de développement, en fait je me suis posé dans un contexte particulier : j'utilises les librairires de cygwin, ce qui me permet d'avoir acces a des fonction existantes normalement sous unix mais pas sous windows (sauf erreur de ma part). Et comme je trouve les fonctions unix assez sympa... ;-)

Au sujet du programme en lui même, ce n'est pas un jeu vidéo que je développe, mais un outil qui analyserait l'écran lors du lancement d'un jeu vidéo. Ceci pour faciliter l'acces a des options communautaires (lier un site web Intranet au jeu).

Si getpixel ne fonctionne pas sur tous les contextes de périph, j'ai peut etre suivi une mauvaise piste, je vais voir du coté des fonctions que rt15 m'annonce. J'écrirai ce que donne mes recherches dans ce sens là.

Merci et à bientôt
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
re,


Bin j'ai fait des éssais, et GetPixel à l'air de très bien marcher. Voilà le source.


Je vois pas à vu de nez ce qui cloche dans ton source, je vais l'essayer.


Mais si tu veux analyser des portions d'écrans, GetPixel risque d'être
un peu lent : un appel de fonction par pixel. BitBlt permet de copier
des portions, mais reste assez lent... M'enfin j'ai super pas compris
ce que tu veux faire.

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Erf, ton code marche très bien chez moi...

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08