gpt4 book ai didi

python - 内存泄漏/Python windows 7 截图

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:06 24 4
gpt4 key购买 nike

我在双显示器系统(Windows7)上尝试了以下 Python 代码来重复保存屏幕截图。它生成 33 个 14.6MB(总计 482MB)的镜头,然后崩溃。通过 Process Explorer 检查,我可以看到已用内存量增加到大约 500MB。

我的问题是如何阻止内存泄漏?

import win32gui, win32ui, win32con, win32api
import time
import os


def my_capture(file_name):
hwin = win32gui.GetDesktopWindow()
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
hwindc = win32gui.GetWindowDC(hwin)
srcdc = win32ui.CreateDCFromHandle(hwindc)
memdc = srcdc.CreateCompatibleDC()
bmp = win32ui.CreateBitmap()
bmp.CreateCompatibleBitmap(srcdc, width, height)
memdc.SelectObject(bmp)
memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)
bmp.SaveBitmapFile(memdc, file_name) # 'screenshot.bmp'


def captureAndSave(i):
if i < 10:
tmpStr = "00000" + str(i)
elif i < 100:
tmpStr = "0000" + str(i)
elif i < 1000:
tmpStr = "000" + str(i)
elif i < 10000:
tmpStr = "00" + str(i)
elif i < 100000:
tmpStr = "0" + str(i)
else:
tmpStr = str(i)

my_capture(tmpStr + '.bmp')


def myMainLoop():
i = 0
while 1:
i = i + 1
captureAndSave(i)
time.sleep(0.2)

#-----------------------------------------------------------------------------

if __name__ == '__main__':
try:
myMainLoop() # capure all monitor windows
except KeyboardInterrupt:
pass

我从以下位置获得了基本代码:Python windows 7 screenshot without PIL :

最佳答案

您需要清理您的位图和 DC,在保存位图后添加类似这样的内容;

win32gui.DeleteObject(bmp.GetHandle())
memdc.DeleteDC()
srcdc.DeleteDC()
win32gui.ReleaseDC(hwin, hwindc)

关于python - 内存泄漏/Python windows 7 截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16575193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com