2010-08-27 14 views
13

विंडोज़ पर स्क्रीनशॉट लेने का सबसे तेज़ तरीका क्या है? PIL.ImageGrab बल्कि धीमा है .. उसी छोटी विंडो के 30 स्क्रीनशॉट लेने में 4-5 सेकंड लगते हैं। पूरे डेस्कटॉप के स्क्रीनशॉट लेना भी धीमा है।विंडोज़ पर पाइथन के साथ एक स्क्रीनशॉट लेने का सबसे तेज़ तरीका

+0

ध्वनि की तरह आप जो ध्वनि चाहते हैं, वह ध्वनि वीडियो हैं, Sourceforge पर ला कैमस्टूडियो। उपयोग का मामला क्या है? –

+7

[winterbells] पर उच्चतम स्कोर प्राप्त करने के लिए (http://www.ferryhalim.com/orisinal/g3/bells.htm) = पी – Claudiu

उत्तर

23

आप सीधे Win32 एपीआई का उपयोग कर सकते हैं।

1) सबसे पहले ऐप पर ध्यान दें कि आप स्क्रीनशॉट लेना चाहते हैं। link text

2) Win32 API स्क्रीनशॉट के साथ मदद कर सकते हैं:

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()) 
+10

बहुत महत्वपूर्ण है, क्योंकि यह हाल ही में मुझे गधे में थोड़ा सा है: आपको हटाने/इस द्वारा बनाई गई सभी डीसी जारी करें, या ~ 9 0 छवियों को लेने के बाद, आप अब और सक्षम नहीं होंगे। इस मामले में, 'dcObj.DeleteDC(); cDC.DeleteDC(); win32gui.ReleaseDC (एचडब्ल्यूएन, डब्ल्यूडीसी) ' – Claudiu

+0

कृपया इस कोड के लिए काम करने के लिए आवश्यक आयात जोड़ें। –

+0

अधिक जानकारी के लिए इस स्क्रिप्ट को देखें: http://bytes.com/topic/python/answers/576924-win32ui-vs-wxpy-screen-capture-multi-monitor –

3

बस पता चला कैसे जीटीके साथ यह करने के लिए। अब तक सबसे तेजी से लगता है:

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 

एक PIL छवि को बदलने के बिना, यह जनहित याचिका से 8x तेजी से अपने परीक्षण के मामले पर है। कनवर्ट करने के साथ, यह अभी भी ~ 2.7x तेज है।

+4

get_rect क्या है? – denfromufa

संबंधित मुद्दे

 संबंधित मुद्दे