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
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
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]
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
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]
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.
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.
Hello,
il y a aussi la bibliothèque mss qui est multiplateforme (nécessite python 3.5+) :
Voici un test de performance ente ImageGrab et mss :An ultra fast cross-platform multiple screenshots module in pure python using ctypes.
Résultat sous Windows 11 :
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 Ubuntu 20.04 :runtime mss: 0.014176299999999989s
255 255 255
runtime PIL.ImageGrab : 0.0403419s
255 255 255
Ami calmant, J.Pruntime mss: 0.004336402000035378s
79 75 65
runtime PIL.ImageGrab : 0.01197784200002161s
79 75 65
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
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..
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager