Hola a Todos,
Necesito capturar la pantalla en Windows, solo que los intentos que he realizado, ninguno captura las interface transparentes como por ejemplo la ventana de buscar y reemplazar del notepad++. He intentado estos metodos y todos funcionan para capturar pantalla pero ninguno recoge las transparencias. ( no se ven las ventanas transparentes, como si no existiesen) from PIL import ImageGrab import time time.sleep(5) box = (100,100,400,400) ImageGrab.grab().crop(box).save("screen_capture.jpg", "JPEG") *import* Image *try*: # built-in driver (1.1.3 and later) grabber = Image.core.grabscreen*except* AttributeError: # stand-alone driver (pil plus) *import* _grabscreen grabber = _grabscreen.grab ### (New in 1.1.3) Take a snapshot of the screen. The pixels inside the# bounding box are returned as an "RGB" image. If the bounding box is# omitted, the entire screen is copied.## @param bbox What region to copy. Default is the entire screen.# @return An image# @since 1.1.3*def* grab(bbox=None): size, data = grabber() im = Image.fromstring( "RGB", size, data, # RGB, 32-bit line padding, origo in lower left corner "raw", "BGR", (size[0]*3 + 3) & -4, -1 ) *if* bbox: im = im.crop(bbox) *return* im ### (New in 1.1.4) Take a snapshot of the clipboard image, if any.## @return An image, a list of filenames, or None if the clipboard does# not contain image data or filenames. Note that if a list is# returned, the filenames may not represent image files.# @since 1.1.4*def* grabclipboard(): debug = 0 # temporary interface data = Image.core.grabclipboard(debug) *if* Image.isStringType(data): *import* BmpImagePlugin, StringIO *return* BmpImagePlugin.DibImageFile(StringIO.StringIO(data)) *return* data import win32gui, win32ui, win32con, win32api hwnd = win32gui.GetDesktopWindow() print hwnd # you can use this to capture only a specific window #l, t, r, b = win32gui.GetWindowRect(hwnd) #w = r - l #h = b - t # get complete virtual screen including all monitors SM_XVIRTUALSCREEN = 76 SM_YVIRTUALSCREEN = 77 SM_CXVIRTUALSCREEN = 78 SM_CYVIRTUALSCREEN = 79 w = vscreenwidth = win32api.GetSystemMetrics(SM_CXVIRTUALSCREEN) h = vscreenheigth = win32api.GetSystemMetrics(SM_CYVIRTUALSCREEN) l = vscreenx = win32api.GetSystemMetrics(SM_XVIRTUALSCREEN) t = vscreeny = win32api.GetSystemMetrics(SM_YVIRTUALSCREEN) r = l + w b = t + h print l, t, r, b, ' -> ', w, h hwndDC = win32gui.GetWindowDC(hwnd) mfcDC = win32ui.CreateDCFromHandle(hwndDC) saveDC = mfcDC.CreateCompatibleDC() saveBitMap = win32ui.CreateBitmap() saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) saveDC.SelectObject(saveBitMap) saveDC.BitBlt((0, 0), (w, h), mfcDC, (l, t), win32con.SRCCOPY) saveBitMap.SaveBitmapFile(saveDC, 'screencapture.bmp') 1. import wx 2. 3. app = wx.PySimpleApp() 4. 5. context = wx.ScreenDC() 6. r, b = context.GetSize() 7. 8. # i have a second monitor left of my primary, so these value are negativ 9. l, t = (-1280, -256) # coulfn't find a wx function to get these 10. 11. w, h = (r - l, b - t) 12. bitmap = wx.EmptyBitmap(w, h, -1) 13. 14. memory = wx.MemoryDC() 15. memory.SelectObject(bitmap) 16. memory.Blit(0, 0, w, h, context, l, t) 17. memory.SelectObject(wx.NullBitmap) 18. 19. #bitmap.SaveFile("screencapture.bmp", wx.BITMAP_TYPE_BMP) 20. #bitmap.SaveFile("screencapture.jpg", wx.BITMAP_TYPE_JPEG) 21. bitmap.SaveFile("screencapture.png", wx.BITMAP_TYPE_PNG) -- *Josu Rodriguez Vilda* * * * *
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/