【问题标题】:Image index out of Range, except it shouldn't be图像索引超出范围,但不应该是
【发布时间】:2019-02-16 00:58:04
【问题描述】:

我正在设置一个需要截取特定窗口的屏幕截图的应用程序。我使用了一些我发现的代码来获取窗口的位置和大小,并且它似乎工作正常,根据第 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)))

【问题讨论】:

标签: python windows python-imaging-library win32gui


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多