图片索引超出范围,但不应超出范围

时间:2019-02-16 00:58:04

标签: python windows python-imaging-library win32gui

我正在设置一个需要对特定窗口进行屏幕截图的应用程序。我使用了一些发现的代码来获取窗口的位置和大小,并且看来行之有效,根据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)))

1 个答案:

答案 0 :(得分:0)

我现在已经意识到问题了;边界框不是由X Y宽度和高度组成,而是由边界框左上角和右下角的坐标组成。这意味着边界框的大小为负数,因此是问题。