IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Récupérer la couleur d'un pixel sur le bureau Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Points : 57
    Points
    57
    Par défaut Récupérer la couleur d'un pixel sur le bureau Windows
    Bonjour, je cherche désespérément une solution pour récupérer la couleur d'un pixel sur l'écran en indiquant les coordonnées du pixel à récupérer !
    Est ce qu'il existe une solution Qt pour pouvoir le faire ?
    Je sais qu'en Java je n'avais qu'a utiliser une méthode : getPixelColor(int x, int y);
    Est ce qu'il existe un équivalent sur Qt svp ?
    Merci d'avance !

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Salut

    Tu peux regarder le code de l'exemple Screenshot Example, qui explique comment faire un screenshot du bureau.
    Le code qui t'intéresse est cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
    Ensuite, faut convertir en QImage avec la fonction QPixmap::toImage() et récupérer le pixel avec QImage::pixel()

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Aie,
    C'est pas possible de récupérer juste le pixel plutôt que de faire une capture de l'écran complète pour après en extraire un pixel ?
    Parce que si mon programme doit faire plusieurs récupérations par seconde (une toutes les 25ms) ça risque d’être très gourmand en ressources.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    il y a des paramètres optionnels à la fonction grabWindow.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPixmap QPixmap::grabWindow ( WId window, int x = 0, int y = 0, int width = -1, int height = -1 ) [static]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    ça y est c'est bon j'ai fait une petite méthode qui se charge de récupérer un pixel selon une position donnée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QColor Dialog::recupPixel(int xPos, int yPos)
    {
        screen =  QPixmap();
        screen = QPixmap::grabWindow(QApplication::desktop()->winId(), xPos, yPos, 1, 1);
        QImage image = screen.toImage();
        QColor pixel = image.pixel(0, 0);
        return pixel;
    }
    Svp, est ce que je n'ai pas fait d'erreurs dans le code pour récupérer exactement le pixel qui est donné en paramètres ?
    Car même pixel + 1 ça risque de me poser des problèmes !

    Je pense que c'est bon pour les paramètres, pour la récupération d'un unique pixel ?
    Merci beaucoup pour votre aide !
    @ +++

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 894
    Points : 219 536
    Points
    219 536
    Billets dans le blog
    124
    Par défaut
    Moi, je n'y vois aucun problème. Auquel pensez-vous ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Moi, je n'y vois aucun problème. Auquel pensez-vous ?
    Que le pixel récupéré soit bien celui qui est passé en coordonnées avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    screen = QPixmap::grabWindow(QApplication::desktop()->winId(), xPos, yPos, 1, 1);
        QImage image = screen.toImage();
        QColor pixel = image.pixel(0, 0);
    Mais a ce que j'ai pu testé, c'est bon, il n'y a pas de soucis !
    Merci de votre aide !

    (Suget Résolu !)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Hello !
    Je déterre ce post parce que je suis passé récement sur Qt 5.0.1 et depuis, je lance mon programme et Qt Créator me sort cette ligne:
    static QPixmap QPixmap::grabWindow(WId, int, int, int, int) is deprecated, use QScreen::grabWindow() instead. Defaulting to primary screen.
    Apparement la fonction que j'utilise est obsolète et QtCréator me suggère d'utiliser QScreen::grabWindow()

    Du coup j'ai remplacé QPixmap par QScreen et j'ai une autre erreur:

    cannot call member function 'QPixmap QScreen::grabWindow(WId, int, int, int, int)' without object
    Apparement QScreen::grabWindow n'est pas statique donc du coups je dois créer un objet QScreen ? j'ai essayé de le faire sans aucun paramètres et ça ne passe pas, c'est un peu compliquer les choses et créer un nouvel objet qui à la base n'était pas nécéssaire ? il vaut mieux que je laisse comme c'était avant malgré ce message (a chaque mouvement de souris) ou il vaut mieux que j'utilise QScreen et si oui, comment faire, parce que pour le moment je n'ai pas réussit.
    Merci de votre aide !

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Il existe http://qt-project.org/doc/qt-5.0/qtg...n.html#screens ou alors la fonction primaryScreen suivant la convenance.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Bon, je n'ai pas réussit même en utilisant primaryScreen, même avec le pointeur vers le QScreen obtenu avec primaryScreen, je n'arrive pas a appeler la fonction grabWindow.
    Mais en cherchant un peu je suis tombé la dessus:
    http://www.developpez.net/forums/d79...screen-resolu/
    Si j'ai bien compris, QScreen concerne le versions linux embarqués or je suis sous windows, ce qui expliquerais pourquoi ça marche pas !
    Dans ce cas, pourquoi QT Créator me sort:
    static QPixmap QPixmap::grabWindow(WId, int, int, int, int) is deprecated, use QScreen::grabWindow() instead. Defaulting to primary screen.
    Finalement j'ai utilisé une fonction Windows avec la quelle j'arrive au même résultat et vu que je dois récupérer un seul pixel, ça ne pose pas de soucis même si je suis quand même curieux de savoir si il existe une solution pour le faire avec QScreen:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        HDC hdc = GetDC(GetDesktopWindow());
        COLORREF couleur = GetPixel(hdc, xPos, yPos);
        QColor pixel = QColor::fromRgb(GetRValue(couleur), GetGValue(couleur), GetBValue(couleur)); // Conversion en QColor
    au niveaux perfs, ça fonctionne a merveille, sauf quand je survole la fenetre de mon application, mais ça me le faisait aussi en utilisant grabWindow() y a moyen d'arranger ça ?
    Merci de votre aide !

  11. #11
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    pourtant, réécrire l'appel de fonction avec un objet au lieu de static, c'est pas compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QScreen* screen = QGuiApplication::primaryScreen();
    QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId(), 10, 10, 1, 1);

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    pourtant, réécrire l'appel de fonction avec un objet au lieu de static, c'est pas compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QScreen* screen = QGuiApplication::primaryScreen();
    QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId(), 10, 10, 1, 1);
    J'ai essayé (tu penses bien) mais çe me donne une erreur à la compilation
    dialog.cpp:54:28: error: invalid use of incomplete type 'class QScreen'
    mais l'utilisation des fonctions windows pour arriver au même résultat me conviens aussi, vu que mon application n'est de toute façon pas portable.
    @ +++

  13. #13
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Cette erreur veut juste dire que tu as oublié de mettre ton #include

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Cette erreur veut juste dire que tu as oublié de mettre ton #include
    Effectivement désolé, j'aurais du faire un peu plus gaffe à ce genre de choses !
    Merci pour l'info, je me sent très con pour le coup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Couleur d'un pixel sur une texture2D
    Par Tuizi dans le forum XNA/Monogame
    Réponses: 1
    Dernier message: 03/06/2008, 23h44
  2. Récupérer la couleur d'un pixel a l'écran
    Par Ekinoks dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 30/01/2008, 19h51
  3. Récupérer la couleur d'un pixel
    Par jbeaussier dans le forum OpenGL
    Réponses: 15
    Dernier message: 28/11/2007, 20h11
  4. Récupérer la couleur d'un pixel
    Par Jere15 dans le forum C++
    Réponses: 4
    Dernier message: 20/06/2007, 16h35
  5. Récupérer la couleur d'un pixel
    Par MadininaSTY dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/06/2006, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo