我想使用PIL的ImageGrab捕获特定的窗口。我下面的代码所做的是,它使用pywin32的FindWindow获取所需窗口的句柄,然后使用GetWindowRect获取其大小和位置。然后,我将ImageGrab与bbox一起使用,该bbox等于我从GetWindowRect获得的结果。但是,这并不能捕获整个窗口。窗口的很大一部分没有显示。我做错了什么?这是我的代码和得到的结果:
import win32gui
import cv2
from PIL import ImageGrab
import numpy as np
fceuxHWND = win32gui.FindWindow(None, 'FCEUX 2.1.4a: Super Mario Bros. (JU)
[!]')
rect = win32gui.GetWindowRect(fceuxHWND)
screen = np.array(ImageGrab.grab(bbox=rect), dtype=np.uint8)
cv2.imshow('test',cv2.cvtColor(screen,cv2.COLOR_BGR2RGB))
答案 0 :(得分:1)
您的DPI设置为125%,并且您的过程不了解DPI。如下致电SetProcessDPIAware
import ctypes
...
ctypes.windll.user32.SetProcessDPIAware()