我必须纠正 Leadtools 函数“L_LoadBitmap() 返回 ERROR_NO_MEMORY”的错误,您可以在此处找到有关它的更多信息。我正在开发的应用程序必须能够处理图像,无论每个图像的大小或数量如何。这里调用函数:
HENHMETAFILE hemf = 0;
BITMAPHANDLE bmh = {0};
hemf = LoadMetaFile( (LPCTSTR)strPath, hDC );
if ( !hemf )
{
memset( &bmh, 0, sizeof(BITMAPHANDLE) );
L_INT nResult = 0;
nResult = L_LoadBitmap( const_cast<LPTSTR>( (LPCTSTR)strPath ), &bmh, 0, ORDER_BGR );
if ( nResult != SUCCESS )
{
MFDebugString( DL_FORMULAR, __FUNCTION__ "( %s ): Can't load background file via L_LoadBitmap (%d)\n", (LPCTSTR)strPath, nResult );
return nullptr;
}
}
pOrigBg = std::make_shared<CBackgroundImage>(strPath, hemf, bmh);
m_ImageCache[strKey.GetString()] = pOrigBg;
return pOrigBg;
这pOrigBg
是一个以std::shared_ptr<CBackgroundImage>
这种方式构造的对象:
NxFE::CBackgroundImage::CBackgroundImage(LPCTSTR strPath, HENHMETAFILE emf, const BITMAPHANDLE& bmp)
: m_Filename(strPath), m_Metafile(emf), m_pLeadBitmap(new BITMAPHANDLE(bmp)),
m_pGdiplusBitmap(NxClass::Win32::GDIPlus::CreateBitmapFromFile((LPCSTR) m_Filename))
{
}
你怎么能看到,pOrigBg
包含一个 std::unique_ptr 类型BITMAPHANDLE
和Gdiplus::Bitmap
. 首先,我认为删除 m_pGdiplusBitmap 的构造函数可能会有所帮助,但事实并非如此。是否有任何可能的方法来释放/减少图形内存的使用?或者至少是一些检查图形内存使用情况的工具(我使用的是 Microsoft Visual Studio 2017)。