您好,我有以下函数,此后我将在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#。

您可以使用DeleteObject删除此HBITMAP。

像这样声明:

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


并删除对象:

API.DeleteObject(hBitmap);


由于函数返回指向HBITMAP的指针,因此不能在返回之前将其删除。相反,当不再使用此位图时,应将其删除得足够晚。

关于c# - 我如何释放Hbitmap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16944048/

10-09 16:04