我正在设置一个需要采用特定窗口的屏幕截图的应用程序。我已经使用了一些我发现的代码来获取窗口的位置和大小,它看起来有效,根据Line 26的输出它工作得很好。但是当我试图从相应的bbox(边界框),甚至(1,1)中获取任何像素时,即使窗口大小肯定大于1,1,它也将输出IndexError: image index out of range
,如第26行的输出所示。我该如何解决这个问题,为什么它似乎超出了范围?
import PIL.ImageGrab as IG
import win32gui
x = 0
y = 0
w = 0
h = 0
def callback(hwnd, extra):
if win32gui.GetWindowText(hwnd) == "Window": #replace window with whatever you like for testing
rect = win32gui.GetWindowRect(hwnd)
global x
global y
global w
global h
x = rect[0]
y = rect[1]
w = rect[2] - x
h = rect[3] - y
def main():
win32gui.EnumWindows(callback, None)
if __name__ == '__main__':
main()
print(x,y,w,h) #DEBUG
screen = IG.grab(bbox=(x,y,w,h))
print(screen.getpixel((1,1)))
我现在意识到了这个问题;边界框不是X Y Width和Height,而是边界框左上角和右下角的坐标。这意味着边界框的大小是负的,因此问题。