在windows上截取截圖的最快方式是什麼? PIL.ImageGrab
相當慢..需要4-5秒才能截取同一個小窗口的30張截圖。整個桌面的截圖甚至更慢。在windows上用python截圖的最快方法
回答
您可以直接使用win32 API。
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())
非常重要,因爲這最近在屁股上咬我:你必須刪除/釋放由此創建的所有DC,或者在拍攝〜90張圖像後,您將無法再使用。在這種情況下,'dcObj.DeleteDC(); cDC.DeleteDC(); win32gui.ReleaseDC(hwnd,wDC)' – Claudiu 2010-09-01 15:39:16
請爲此代碼添加必要的導入工作。 – 2012-12-26 17:29:46
請參閱此腳本以獲取更多詳細信息:http://bytes.com/topic/python/answers/576924-win32ui-vs-wxpy-screen-capture-multi-monitor – 2013-01-06 07:33:02
只是發現瞭如何用GTK做。似乎是最快迄今:
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
圖像,它在我的測試案例比PIL快8倍。隨着轉換,它仍然快2.7倍。
什麼是get_rect? – denfromufa 2014-10-09 16:33:44
聽起來像你真正想要的是屏幕視頻,在Sourceforge上的一個CamStudio。什麼是用例? – 2010-08-27 16:35:05
獲得有史以來的最高分[[漂亮的冬季]](P)[編輯] = P – Claudiu 2010-08-27 17:25:28