Schnell bekommen Sie die Farbe der Pixel auf dem Bildschirm in Python auf Windows 7
Ich brauche, um die Farbe der Pixel auf dem Bildschirm oder das aktive Fenster ist, und ich so tun müssen schnell. Ich habe versucht, mit win32gui und ctypes/windll, aber Sie sind viel zu langsam. Jedes dieser Programme erhält die Farbe von 100 Pixel:
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())
und
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())
Jede dieser dauert etwa 1,75 Sekunden. Ich brauche ein Programm wie dieses zu nehmen, weniger als 0,1 Sekunden. Was macht es so langsam?
Arbeite ich mit Python 3.x und Windows 7. Wenn Ihre Lösung erfordert, dass ich die Verwendung von Python 2.x, bitte link mich zu einem Artikel, der zeigt, wie man Python 3.x und 2.x beide installiert. Ich schaute, aber konnte nicht herausfinden, wie dies zu tun.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das exakt gleiche problem, und es gelöst (in Java, in C#). Die Haupt-Idee hinter der Lösung ist GetPixel vom Bildschirm ist langsam, und Sie können nicht beheben, dass. Aber Sie müssen einige Pixel, Sie können eine Reihe von Ihnen auf einmal.
Die Zeit, die es dauerte, bis 64 Pixel wurde 98 mal schneller.
Dank Margus' Richtung, konzentrierte ich mich auf das Bild vor dem extrahieren der pixel-Informationen. Hier ist eine praktikable Lösung, mit der Python Imaging Library (PIL), die benötigt Python 2.x.
Ich nicht denke, es wird einfacher als das. Dies dauert (durchschnittlich), 0,1 Sekunden, das ist ein wenig langsamer als ich möchte, aber schnell genug.
Als für Python 3.x und 2.x, die installiert sind, die ich getrennt, in eine neue Frage. Ich bin immer noch einige Probleme mit ihm, aber es ist allgemein arbeiten.
Dies ist besser als mit
getpixel
alle die Zeit und arbeitet schneller.Referenz: Bild.laden
(0, 100, 10)
bedeutet infor y in range
undfor x in range
. Ich dachte, von dem Sie die Pixel, aber warum wäre es 3 zahlen? Was tut jeder von Ihnen bedeuten?Deaktivieren der Windows-Desktop-Zusammensetzung Geschwindigkeiten pixel nach oben Lesen VIEL.
Computer -> Eigenschaften -> Erweiterte Einstellungen -> Leistung -> desktop-Komposition [ ] (Achtung dies deaktiviert die Windows-Transparenz-Effekte)
Python 2.7 (Sollte gleich für 3.x)
AutoIt zum Vergleich