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

Python Discussion :

Verifier la couleur d'un pixel de l'écran


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    juillet 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : juillet 2021
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Verifier la couleur d'un pixel de l'écran
    Bonjour, je voulais savoir si c'était possible de par exemple verifier si la couleur en 200,200 est du bleu sans avoir a prendre une capture d'écran, la stocker et l'ouvrir dans le programme

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    11 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 11 416
    Points : 27 928
    Points
    27 928
    Billets dans le blog
    1
    Par défaut
    Bonjour

    A mon avis non. Parce que ce que tu vois en 200,200 ce n'est pas ton écran mais une image mise en "fond d'écran" !!!

    En tout cas, Qt permet d'appeler QApplication.desktop() qui retourne un QDesktopWidget mais nulle part dans le QDesktopWidget je n'ai trouvé de champ décrivant les pixels. On a la taille de l'écran oui, mais pas son contenu.

    Et de toute façon tu devras passer par une librairie d'IHM (comme Qt que j'ai mentionné).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    juillet 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : juillet 2021
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    A mon avis non. Parce que ce que tu vois en 200,200 ce n'est pas ton écran mais une image mise en "fond d'écran" !!!

    En tout cas, Qt permet d'appeler QApplication.desktop() qui retourne un QDesktopWidget mais nulle part dans le QDesktopWidget je n'ai trouvé de champ décrivant les pixels. On a la taille de l'écran oui, mais pas son contenu.

    Et de tpute façon tu devras passer par une librairie d'IHM (comme Qt que j'ai mentionné).
    Merci pour ta réponse et c'est bien ce que je pensais/j'avais trouvé mais je préférais demander confirmation si un truc un peu obscur était connu, je vais le faire dans un autre langage alors je pense

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    20 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 20 147
    Points : 34 846
    Points
    34 846
    Par défaut
    Citation Envoyé par krepiti Voir le message
    Merci pour ta réponse et c'est bien ce que je pensais/j'avais trouvé mais je préférais demander confirmation si un truc un peu obscur était connu, je vais le faire dans un autre langage alors je pense
    Avant de poser une question vous êtes supposé chercher un peu sur le ouèbe... dans ce cas particulier, on trouve par exemple ceci qui montre qu'il y a des pistes à explorer (et que c'est possible).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    11 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 11 416
    Points : 27 928
    Points
    27 928
    Billets dans le blog
    1
    Par défaut
    Ok, je me suis trompé, c'est possible. Désolé.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Invité
    Invité(e)
    Par défaut
    Il paraîtrait suivant le topic mentionné par Wiztiti que ctypes.windll.gdi32.GetPixel() est la méthode la plus rapide ! Edit : sous windows 7 malheureusement...

    A vérifier en 3.X...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def rgba(colorref):
        mask = 0xff
        return [(colorref & (mask << (i * 8))) >> (i * 8) for i in range(4)] #cf. https://stackoverflow.com/questions/58639656/how-to-convert-colorref-from-getpixel-to-rgb-in-python
     
    >>> rgba(ctypes.windll.gdi32.GetPixel(dc,200,200))
    [253, 253, 253, 0]
    Dernière modification par Invité ; 19/11/2022 à 17h38.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    20 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 20 147
    Points : 34 846
    Points
    34 846
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Il paraîtrait suivant le topic mentionné par Wiztiti que ctypes.windll.gdi32.GetPixel() est la méthode la plus rapide !

    A vérifier en 3.X...
    Une fonction Windows dépends de la version de Windows (non de Python).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ah bon ?


    Au final il semble impossible de désactiver la composition du bureau sur Windows 10 donc ctypes.windll.gdi32.GetPixel() reste lent...
    Dernière modification par Invité ; 19/11/2022 à 17h37.

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    3 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 3 248
    Points : 7 863
    Points
    7 863
    Par défaut
    Hello,
    il y a aussi la bibliothèque mss qui est multiplateforme (nécessite python 3.5+) :
    An ultra fast cross-platform multiple screenshots module in pure python using ctypes.
    Voici un test de performance ente ImageGrab et mss :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    from PIL import ImageGrab
    import mss.tools
    import timeit
     
    with mss.mss() as sct:
        # The screen part to capture
        monitor = {"top": 200, "left": 200, "width": 1, "height": 1}
        startTime = timeit.default_timer()
        sct_img = sct.grab(monitor)
        endTime = timeit.default_timer()
        r, g, b = sct_img.pixel(0, 0)
        runTime = endTime - startTime
        print("runtime mss: " + str(runTime) + "s")
        print(r, g, b)
    startTime = timeit.default_timer()
    img = ImageGrab.grab(bbox=(200,200,201,201))
    endTime = timeit.default_timer()
    r, g, b = img.getpixel((0, 0))
    runTime = endTime - startTime
    print("runtime PIL.ImageGrab : " + str(runTime) + "s")
    print(r, g, b)
    Résultat sous Windows 11 :
    runtime mss: 0.014176299999999989s
    255 255 255
    runtime PIL.ImageGrab : 0.0403419s
    255 255 255
    Résultat sous Ubuntu 20.04 :
    runtime mss: 0.004336402000035378s
    79 75 65
    runtime PIL.ImageGrab : 0.01197784200002161s
    79 75 65
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Invité
    Invité(e)
    Par défaut
    Merci Juju !

    Je ne connaissais pas mss !

    Windows est tellement mal optimisé... La "composition du bureau" (dwm.exe) ralenti énormément la commande ctypes dédiée à la capture de pixel..

Discussions similaires

  1. Recherche de la couleur d'un pixel sur l'écran
    Par tasse2the dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/07/2010, 22h30
  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, 20h51
  3. [TBitmap] Recuperer la couleur d un pixel
    Par DamessS dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/12/2004, 09h47
  4. [VB6] Comment récupérer la couleur d'un pixel de l'écran?
    Par Taurëndil dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 26/03/2004, 09h02
  5. Obtenir la couleur d'un pixel
    Par GLDavid dans le forum OpenGL
    Réponses: 2
    Dernier message: 09/03/2004, 19h21

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