使用BITMAP结构获取位图的信息后...
BITMAP bm;
HBITMAP hBitmap;
hBitmap = (HBITMAP)LoadImage(...);
GetObject(phBitmap, sizeof(BITMAP), &bm );
我应该如何释放/释放/处置bm
?
尝试过delete
和DeleteObject
,但都无效。
答案 0 :(得分:1)
我会这样说
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);
}
它是引用资源的句柄,当不再使用时应释放资源。
答案 1 :(得分:1)
如果您已将delete
分配给运算符BITMAP
,则只需使用运算符new
。 (现代的,惯用的C ++也不鼓励手动进行内存管理,但是既然您在问题中提出了这个问题,就可以了。)
BITMAP
是POD值维和像素数据的结构,并且HBITMAP
可以是BITMAP
的句柄(如果这样分配的话)。 HBITMAP
确实确实需要释放,并在不再需要且不再选择到DC中时调用DeleteObject
,即使它已分配在堆栈中也是如此;堆栈上的BITMAP
超出范围时将消失。
运算符delete
与Windows GDI函数DeleteObject
之间有区别。 delete
是用于从堆中删除对象的C ++关键字; DeleteObject
是用于释放GDI资源的API调用。