【问题标题】:How can i free hbitmap我怎样才能释放hbitmap
【发布时间】:2013-06-05 15:35:25
【问题描述】:

您好,我有以下函数,之后我从 c# 中使用它来显示带有“Bitmap.FromHbitmap(IntPtr)”的位图,但经过几次使用后,这会以内存泄漏告终。

IntPtr GetFrame(int Width,int Height,int nFrame)
    {
        width= Width;
        height = Height;
        HBITMAP hb;
        m_piHelper->GetBmp(width,height,nFrame,&hb);    
        return IntPtr(hb);
    }

可能我应该删除某个对象,但我不知道在哪里可以做,我在返回之前尝试过,但我最终没有图像,而是一个 gdi 错误

谢谢,

【问题讨论】:

    标签: c# memory-leaks hbitmap


    【解决方案1】:

    我假设您使用的是 C#。

    您可以使用DeleteObject 删除此HBITMAP。

    这样声明:

    using System.Runtime.InteropServices class API { [DllImport("WINGDI32.dll")] public static extern int DeleteObject(IntPtr hObject); }
    

    并删除对象:

    API.DeleteObject(hBitmap);
    

    由于您的函数返回指向 HBITMAP 的指针,因此您不能在返回之前将其删除。相反,您应该在以后不再使用此位图时将其删除。

    【讨论】:

      猜你喜欢
      • 2013-01-28
      • 1970-01-01
      • 2018-07-21
      • 2020-04-05
      • 1970-01-01
      • 2014-06-20
      • 2012-08-06
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多