Мне нужно исправить ошибку, из-за которой функция 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).