繁体   English   中英

如何发布BITMAP结构?

[英]How do I release a BITMAP struct?

使用BITMAP结构获取位图的信息后...

BITMAP bm;
HBITMAP hBitmap;
hBitmap = (HBITMAP)LoadImage(...);
GetObject(phBitmap, sizeof(BITMAP), &bm );

我应该如何释放/释放/处置bm

尝试过deleteDeleteObject ,没有一个起作用。

我会这样说

HBITMAP hBitmap;
hBitmap = (HBITMAP)LoadImage(...);

应该更好/更好

HANDLE handle = LoadImage(...);
if (NULL == handle)
{
  /*handle error */
}
else
{
  HBITMAP hbitmap = handle;

  {
    BITMAP bm = {0}; /* allocate and
            initialise bm on the stack. */

    GetObject(hbitmap, sizeof bm, &bm);

    /* Use bm here. */

   } /* Have bm be deallocated or at least
          be inaccessible from here on. */

   DeleteObject(hbitmap);
}

它是引用资源的句柄,当不再使用时应将其释放。

如果您为BITMAP分配了new则只需要使用operator delete (现代的,惯用的C ++也不鼓励手动进行内存管理,但是既然您在问题中对此提出了疑问,那么您就可以了)。

BITMAP是POD值维和像素数据的结构,如果按这样分配,则HBITMAP可以是BITMAP的句柄。 HBITMAP 确实需要在不再需要且不再选择到DC中时通过调用DeleteObject来释放,即使已将其分配在堆栈中也是如此; 超出范围时,堆栈上的BITMAP将消失。

操作员delete和Windows GDI函数DeleteObject之间有区别。 delete是用于从堆中删除对象的C ++关键字; DeleteObject是用于释放GDI资源的API调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM