Was ist der schnellste Weg, um einen Screenshot auf Windows zu machen? PIL.ImageGrab
ist ziemlich langsam .. es dauert zwischen 4-5 Sekunden, um 30 Screenshots des gleichen kleinen Fensters zu machen. Das Erstellen von Screenshots des gesamten Desktops ist noch langsamer.Der schnellste Weg, um einen Screenshot mit Python auf Windows
Antwort
Sie können Win32-APIs direkt verwenden.
1) Geben Sie zuerst den Fokus auf die App, von der Sie einen Screenshot machen möchten. link text
2) Win32 API kann mit dem Screenshot helfen:
import win32gui
import win32ui
hwnd = win32gui.FindWindow(None, windowname)
wDC = win32gui.GetWindowDC(hwnd)
dcObj=win32ui.CreateDCFromHandle(wDC)
cDC=dcObj.CreateCompatibleDC()
dataBitMap = win32ui.CreateBitmap()
dataBitMap.CreateCompatibleBitmap(dcObj, w, h)
cDC.SelectObject(dataBitMap)
cDC.BitBlt((0,0),(w, h) , dcObj, (0,0), win32con.SRCCOPY)
dataBitMap.SaveBitmapFile(cDC, bmpfilenamename)
# Free Resources
dcObj.DeleteDC()
cDC.DeleteDC()
win32gui.ReleaseDC(hwnd, wDC)
win32gui.DeleteObject(dataBitMap.GetHandle())
SEHR WICHTIG, wie dies vor kurzem mir in den Arsch gebissen: Sie müssen löschen/Lassen Sie alle erstellten DCs frei, oder nachdem Sie ~ 90 Bilder aufgenommen haben, werden Sie nicht mehr in der Lage sein. In diesem Fall 'dcObj.DeleteDC(); cDC.DeleteDC(); win32gui.ReleaseDC (hwnd, wDC) ' – Claudiu
Fügen Sie die erforderlichen Importe hinzu, damit dieser Code funktioniert. –
Sehen Sie dieses Skript für weitere Details: http://bytes.com/topic/python/answers/576924-win32ui-vs-wxpy-screen-capture-multi-monitor –
gerade herausgefunden, wie es mit gtk zu tun. Scheint schnellste weit von:
def image_grab_gtk(window):
left, top, right, bot = get_rect(window)
w = right - left
h = bot - top
s = gtk.gdk.Pixbuf(
gtk.gdk.COLORSPACE_RGB, False, 8, w, h)
s.get_from_drawable(
gtk.gdk.get_default_root_window(),
gtk.gdk.colormap_get_system(),
left, top, 0, 0, w, h)
final = Image.frombuffer(
"RGB",
(w, h),
s.get_pixels(),
"raw",
"RGB",
s.get_rowstride(), 1)
return final
Ohne sich auf eine PIL
Bild umwandelt, es als PIL auf meinem Testfall 8x schneller ist. Beim Konvertieren ist es immer noch ~ 2.7x schneller.
Was ist get_rect? – denfromufa
Sound wie, was Sie wirklich wollen, sind Bildschirm Videos, a la CamStudio auf Sourceforge. Was ist der Anwendungsfall? –
, um die höchste Punktzahl jemals auf [Winterbells] (http://www.ferryhalim.com/orisinal/g3/belles.htm) = P – Claudiu