【发布时间】:2016-07-27 19:35:51
【问题描述】:
我有一个脚本,它位于游戏之外,读取像素,并通过“按键”、“点击”等方式对该信息做出反应。因此,为了获取像素,我使用这样的代码
def function():
a = win32gui.GetPixel(win32gui.GetDC(win32gui.GetActiveWindow()), x, y)
return a
为了快速获取屏幕上的像素值并让脚本快速做出反应。
它开始很好,能够及时执行它需要的一切,但它会逐渐变慢。
通过尝试使用类似这样的其他方法,我已将问题源确定为 GetPixel
def function():
box = (x1, y1, x2, y2)
im = ImageOps.grayscale(ImageGrab.grab(box))
a = array(im.getcolors())
a = a.sum()
return a
这太慢了,但是如果我运行包含这些其他方法的 while 循环,它们不会像 GetPixel 的快速方法那样逐渐执行越来越慢(内存泄漏。)
我正在使用之后删除的局部变量等。问题是 GetPixel。我只是不知道它没有删除的东西在哪里,如何告诉 Python 删除它,如果这可能的话,等等。
【问题讨论】:
-
您是否尝试过将设备内容(即
win32gui.GetDC(win32gui.GetActiveWindow()))存储在函数内的局部变量中,然后在使用后将其删除? -
del/gc.collcet可以删除对象/收集垃圾,也可以使用gc.garbage查看是否有引用循环
标签: python memory pixel getpixel