¿Cuál es la manera más rápida de tomar una captura de pantalla en Windows? PIL.ImageGrab
es bastante lento ... tarda entre 4 y 5 segundos para tomar 30 capturas de pantalla de la misma ventana pequeña. Tomar capturas de pantalla de todo el escritorio es aún más lento.La forma más rápida de tomar una captura de pantalla con Python en Windows
Respuesta
Puede usar win32 APIs directamente.
1) En primer lugar preste atención a la aplicación de la que desea tomar la captura de pantalla. link text
2) Win32 API puede ayudar con la captura de pantalla:
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())
MUY IMPORTANTE, ya que esto me ha mordido recientemente el culo: TIENES QUE borrar/suelte todos los DC creados por esto, o después de tomar ~ 90 imágenes, ya no podrá. en este caso, 'dcObj.DeleteDC(); cDC.DeleteDC(); win32gui.ReleaseDC (hwnd, wDC) ' – Claudiu
Agregue las importaciones necesarias para que funcione este código. –
Vea este script para más detalles: http://bytes.com/topic/python/answers/576924-win32ui-vs-wxpy-screen-capture-multi-monitor –
acaba de encontrar la manera de hacerlo con GTK. Parece más rápido, con mucho:
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
sin convertir a un PIL
imagen, es 8x más rápido que el PIL en mi caso de prueba. Con la conversión, todavía es ~ 2.7x más rápido.
¿Qué es get_rect? – denfromufa
- 1. C# ¿Cuál es la manera más rápida de tomar una captura de pantalla?
- 2. Tomar una captura de pantalla con Pyglet [Fix'd]
- 3. Cómo tomar una captura de pantalla con FireMonkey (multiplataformas)
- 4. ¿La forma más rápida de ver la pantalla? Cualquier idioma
- 5. ¿Cómo tomar la captura de pantalla programáticamente?
- 6. ¿Cómo tomar una captura de pantalla con unidad HTML?
- 7. Sin iPhone, ¿cómo tomar una captura de pantalla con XCode?
- 8. Obtener captura de pantalla en Windows con Python?
- 9. Tomar una captura de pantalla parcial en el iPad
- 10. La forma más rápida de reposicionar la sublista en python
- 11. ¿Cómo tomar una captura de pantalla de una página web?
- 12. La forma más rápida de buscar una lista en python
- 13. La forma más rápida de unificar una lista en Python
- 14. Tomar captura de pantalla de una página web (remota) programáticamente
- 15. ¿Cómo puedo tomar una captura de pantalla en una aplicación de Windows?
- 16. ¿La forma más rápida de escribir archivos hdf5 con Python?
- 17. Cómo tomar una captura de pantalla en OpenGL
- 18. ¿Cuál es la forma "más rápida" de realizar una captura de pantalla de una ventana específica bajo Linux programáticamente?
- 19. Tomar una captura de pantalla de área específica
- 20. C#: cómo tomar una captura de pantalla de una parte de la pantalla
- 21. ¿Cómo puedo tomar una captura de pantalla y guardarla como JPEG en Windows?
- 22. cómo tomar una captura de pantalla del iPhone programáticamente?
- 23. ¿Hay alguna manera de tomar una captura de pantalla del escritorio de Windows del usuario?
- 24. Captura de pantalla en Python - Cross Platform
- 25. La forma más rápida de ordenar en Python
- 26. ¿Cuál es la mejor manera de tomar capturas de pantalla de una ventana con C++ en Windows?
- 27. ¿Cómo puedo tomar una captura de pantalla de un sitio web con .NET?
- 28. ¿Cuál es la forma más rápida de eliminar una carpeta grande en Windows?
- 29. Captura de pantalla en Haskell?
- 30. ¿Hay alguna forma de tomar una captura de pantalla con Java y guardarla en algún tipo de imagen?
Suena como lo que realmente quieres son videos de pantalla, a la CamStudio en Sourceforge. ¿Cuál es el caso de uso? –
para obtener el puntaje más alto en [winterbells] (http://www.ferryhalim.com/orisinal/g3/bells.htm) = P – Claudiu