zoukankan      html  css  js  c++  java
  • Python中CreateCompatibleDC和CreateBitmap造成的内存泄漏

     1 def PrintScreen():
     2     hwnd = 0  # 窗口的编号,0号表示当前活跃窗口
     3     # 根据窗口句柄获取窗口的设备上下文DC(Divice Context)
     4     hwndDC = win32gui.GetWindowDC(hwnd)
     5     # 根据窗口的DC获取mfcDC
     6     mfcDC = win32ui.CreateDCFromHandle(hwndDC)
     7     # mfcDC创建可兼容的DC
     8     saveDC = mfcDC.CreateCompatibleDC()
     9     # 创建bigmap准备保存图片
    10     saveBitMap = win32ui.CreateBitmap()
    11     # 获取监控器信息
    12     MoniterDev = win32api.EnumDisplayMonitors(None, None)
    13     w = MoniterDev[0][2][2]
    14     h = MoniterDev[0][2][3]
    15     # print w,h   #图片大小
    16     # 为bitmap开辟空间
    17     saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)
    18     # 高度saveDC,将截图保存到saveBitmap中
    19     saveDC.SelectObject(saveBitMap)
    20     # 截取从左上角(0,0)长宽为(w,h)的图片
    21     saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)
    22     saveBitMap.SaveBitmapFile(saveDC, "ps.png")
    23 
    24     # 释放内存,不然会造成资源泄漏
    25     win32gui.DeleteObject(saveBitMap.GetHandle())
    26     saveDC.DeleteDC()
    27 
    28     file = read_file("ps.png")
    29     os.remove("ps.png")
    30     return file

    只要都释放掉就可以了,25 26行

  • 相关阅读:
    C语言中可变函数参数变量的实现
    Oracle电话面试
    JS和C#方法相互调用
    asp.net 页面从初始化到卸载事件顺序
    解决.NET CF 3.5 Bitmap(Stream)未处理异常问题
    sql2008新增时间类数据类型学习
    c#和Javascript操作同一json对象
    被研究生了
    分形
    跑钱
  • 原文地址:https://www.cnblogs.com/baocong/p/9667334.html
Copyright © 2011-2022 走看看