Obtenir rapidement la couleur de certains pixels de l'écran, en Python sur Windows 7
J'ai besoin d'obtenir la couleur de certains pixels de l'écran ou de la fenêtre active, et j'ai besoin de le faire rapidement. J'ai essayé d'utiliser win32gui et ctypes/windll mais elles sont beaucoup trop lents. Chacun de ces programmes obtient la couleur de 100 pixels:
import win32gui
import time
time.clock()
for y in range(0, 100, 10):
for x in range(0, 100, 10):
color = win32gui.GetPixel(win32gui.GetDC(win32gui.GetActiveWindow()), x , y)
print(time.clock())
et
from ctypes import windll
import time
time.clock()
hdc = windll.user32.GetDC(0)
for y in range(0, 100, 10):
for x in range(0, 100, 10):
color = windll.gdi32.GetPixel(hdc, x, y)
print(time.clock())
Chacun de ces prend environ 1.75 secondes. J'ai besoin d'un programme comme celui-ci pour prendre moins de 0,1 secondes. Qu'est ce qui il si lent?
Je travaille avec Python 3.x et Windows 7. Si votre solution j'utilise Python 2.x, merci de me lier à un article montrant comment avoir Python 3.x et 2.x fois installé. J'ai regardé, mais je ne pouvais pas comprendre comment le faire.
Merci!
OriginalL'auteur dln385 | 2010-09-27
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce même problème, et résolu (en Java, en C#). L'idée principale derrière la solution est GetPixel de l'écran est lent et vous ne pouvez pas résoudre ce problème. Mais comme vous avez besoin de quelques pixels, vous pouvez obtenir un tas d'entre eux tout à la fois.
Le temps qu'il a fallu pour obtenir 64 pixels est de 98 fois plus rapide.
Oui, fondamentalement, vous avez besoin CopyFromScreen méthode équivalente .net, avec classe Bitmap où vous pouvez accéder à pixel unique par ses coordonnées. Et oui, les gens ont fait cela avant et il y a beaucoup de bibliothèques que vous pouvez importer, choisissez ce qui vous convient le mieux.
OriginalL'auteur Margus
Grâce à Margus' la direction, je me suis concentré sur l'obtention de l'image avant de l'extraire les informations de pixel. Voici une solution réalisable à l'aide de la Python Imaging Library (PIL), qui nécessite Python 2.x.
Je ne pense pas que ça devient pas plus simple que ça. Cela prend (en moyenne) de 0,1 secondes, ce qui est un peu plus lent que je le voudrais, mais assez rapide.
Que pour avoir Python 3.x et 2.x fois installé, je me suis séparée que dans un nouvelle question. Je suis toujours avoir des problèmes avec elle, mais il est généralement de travail.
OriginalL'auteur dln385
C'est mieux que d'utiliser
getpixel
tout le temps et fonctionne plus rapidement.Référence: Image.charge
Bonjour, je sais que c'est vieux, mais je me demandais ce que
(0, 100, 10)
moyensfor y in range
etfor x in range
. Je pensais, d'où pour prendre les pixels, mais pourquoi y aurait-il 3 chiffres? Que fait chacun d'entre eux?OriginalL'auteur Oleh Prypin
Désactivation du Bureau de Windows la Composition des vitesses pixel de lecture BEAUCOUP.
Ordinateur -> Propriétés -> paramètres système Avancés - > Performances -> la composition du bureau [ ] (attention ceci désactive Windows est des effets de transparence)
Python 2.7 (Doit être la même pour les 3.x)
AutoIt pour la comparaison
OriginalL'auteur Jaakko