将 ImageGrab 与来自 pywin32 的 GetWindowRect 的 bbox 结合使用
Using ImageGrab with bbox from pywin32's GetWindowRect
我想使用 PIL 的 ImageGrab 来捕捉特定的 window。我下面的代码所做的是,它使用 pywin32 的 FindWindow 来获取我想要的 window 的句柄,然后使用 GetWindowRect 获取其大小和位置。然后,我将 ImageGrab 与 bbox 一起使用,该 bbox 等于我从 GetWindowRect 获得的结果。但是,这并不能捕获整个 window; window 的很大一部分未显示。我做错了什么?这是我的代码和我得到的结果:
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))
Result of code
您的 DPI 设置为 125%,您的进程不支持 DPI。调用SetProcessDPIAware
如下
import ctypes
...
ctypes.windll.user32.SetProcessDPIAware()
我想使用 PIL 的 ImageGrab 来捕捉特定的 window。我下面的代码所做的是,它使用 pywin32 的 FindWindow 来获取我想要的 window 的句柄,然后使用 GetWindowRect 获取其大小和位置。然后,我将 ImageGrab 与 bbox 一起使用,该 bbox 等于我从 GetWindowRect 获得的结果。但是,这并不能捕获整个 window; window 的很大一部分未显示。我做错了什么?这是我的代码和我得到的结果:
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))
Result of code
您的 DPI 设置为 125%,您的进程不支持 DPI。调用SetProcessDPIAware
如下
import ctypes
...
ctypes.windll.user32.SetProcessDPIAware()