我必须纠正一个Leadtools函数“ L_LoadBitmap()返回ERROR_NO_MEMORY”的错误,有关它的更多信息,您可以找到Here。 尽管每个图像的大小或计数,我正在处理的应用程序都必须能够处理图像。 这里的函数称为:
HENHMetaFILE hemf = 0;
BITMAPHANDLE bmh = {0};
hemf = LoadMetaFile( (LPCTSTR)strPath,hDC );
if ( !hemf )
{
memset( &bmh,sizeof(BITMAPHANDLE) );
L_INT nResult = 0;
nResult = L_LoadBitmap( const_cast<LPTSTR>( (LPCTSTR)strPath ),&bmh,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
包含类型为BITMAPHANDLE
和Gdiplus::Bitmap
的std :: unique_ptr。
首先,我认为删除m_pGdiplusBitmap的构造函数可能有帮助,但没有帮助。
有什么可能的方法来释放/减少图形内存的使用?或者至少是一些检查图形内存使用情况的工具(我正在使用microsoft Visual Studio 2017)。