无法从资源加载位图

Posted

技术标签:

【中文标题】无法从资源加载位图【英文标题】:Not able to load Bitmap from resource 【发布时间】:2012-07-26 11:54:00 【问题描述】:

我无法从资源中加载位图。我有一个想要维护的项目。 图片正在从文件中加载,但我想从资源中加载它们。

所以,下面的代码正在运行:

WCHAR path[MAX_PATH] = TEXT("C:\\nananana...");
pBitmapClose = Bitmap::FromFile(path);

但是,当我尝试从资源中使用时,它不起作用。我尝试了以下几个参数:

pBitmapClose = Bitmap::FromResource(g_hInstance, MAKEINTRESOURCE(IDB_BTN_CLOSE));

pBitmapClose = Bitmap::FromResource((HINSTANCE) GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BTN_CLOSE)); 

谁能帮帮我?

【问题讨论】:

“它不工作”是什么意思?你有错误吗?还是位图没有显示? 您考虑过使用CBitmap 类吗? 您是否验证了位图确实在应用程序的资源中,并且使用了您期望的实际 ID 号? 位图加载失败后获取错误码并检查。这会让你知道出了什么问题。 【参考方案1】:

你的资源是什么格式的?

GDI+ 只能从资源中加载位图 (.BMP) 图像。如果要从资源中加载 PNG 或 JPG 图像,则需要使用流将其组合在一起。请参阅http://www.codeproject.com/Articles/3537/Loading-JPG-PNG-resources-using-GDI 了解可以做到这一点的便捷类。

【讨论】:

【参考方案2】:
BOOL  CreateBitmap(LPCTSTR szFileName)

    if(::PathFileExists(szFileName))
        m_pBitmap = Bitmap::FromFile(T2CW(szFileName));
    else
    
        m_pBitmap = Bitmap::FromResource( ModuleHelper::GetResourceInstance(), MAKEINTRESOURCE(IDB_NOFIND));
    
    return !IsNull();

// 代码可以运行

【讨论】:

以上是关于无法从资源加载位图的主要内容,如果未能解决你的问题,请参考以下文章

尝试从资源加载位图返回 NULL,错误代码为 1813

从 VB6 访问 C++ DLL 中的位图资源

CEGUIFont资源加载流程

CEGUIFont资源加载流程

CEGUIFont资源加载流程

UIProgressView 在我的应用程序加载其资源时没有更新