[英]How do I release a BITMAP struct?
使用BITMAP结构获取位图的信息后...
BITMAP bm;
HBITMAP hBitmap;
hBitmap = (HBITMAP)LoadImage(...);
GetObject(phBitmap, sizeof(BITMAP), &bm );
我应该如何释放/释放/处置bm
?
尝试过delete
和DeleteObject
,没有一个起作用。
我会这样说
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.