图像索引超出范围,但不应该是
Posted
技术标签:
【中文标题】图像索引超出范围,但不应该是【英文标题】: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)))
【问题讨论】:
ImageGrab.grab(bbox) and Image.getpixel() Used together的可能重复 【参考方案1】:我现在已经意识到问题所在了;边界框不是由 X Y 宽度和高度组成,而是由边界框左上角和右下角的坐标组成。这意味着边界框的大小是负数,因此出现了问题。
【讨论】:
以上是关于图像索引超出范围,但不应该是的主要内容,如果未能解决你的问题,请参考以下文章
Swift Firebase UISearchController 索引超出范围