【发布时间】:2018-01-04 09:51:24
【问题描述】:
我正在尝试使用 GDI 捕获屏幕,我找到了一个代码 sn-p 并根据我的要求对其进行了修改。这是代码[EDIT:为简单起见修改了代码]:
def getfunc():
# grab a handle to the main desktop window
hdesktop = win32gui.GetDesktopWindow()
# create a device context
desktop_dc = win32gui.GetWindowDC(hdesktop)
img_dc = win32ui.CreateDCFromHandle(desktop_dc)
# create a memory based device context
self.mem_dc = img_dc.CreateCompatibleDC()
# create a bitmap object
screenshot = win32ui.CreateBitmap()
screenshot.CreateCompatibleBitmap(img_dc, width, height)
self.mem_dc.SelectObject(screenshot)
# copy the screen into our memory device context
try:
self.mem_dc.BitBlt((destUpLeftX, destUpLeftY), (width, height), img_dc, (srcUpLeftX, srcUpLeftY),win32con.SRCCOPY)
except :
logger.debug("BitBlt failed")
img_dc.DeleteDC()
win32gui.ReleaseDC(hdesktop, desktop_dc)
win32gui.DeleteObject(screenshot.GetHandle())
def delete(self):
self.mem_dc.DeleteDC()
现在,当我尝试运行此代码时,恰好经过 80 次迭代。我收到错误消息说 createDCFromHandle 失败或 createCompatibleDC 失败。
我查看以下stackoverflow question的任何解决方案
根据帖子,存在内存泄漏问题,我根据建议修改了删除功能。但我认为我仍然失踪,任何相同的指针?
【问题讨论】:
-
显示minimal reproducible example。您肯定会泄漏您在
getfunc中创建并保存在局部变量中的所有内容。 -
@DavidHeffernan 尝试删除局部变量,但仍然是同样的问题,还有其他指针吗?
标签: python winapi memory-leaks gdi+ win32gui