将png资源加载到CBitMap中

Roh*_*mar 9 c++ mfc

如何将png资源加载到CBitMap中?当我尝试这个它不起作用.

CImage image;
image.LoadFromResource(AfxGetInstanceHandle(), IDB_PNG1);
bitmap.Attach(image.Detach());
Run Code Online (Sandbox Code Playgroud)

它给了我一个找不到的错误资源类型.有没有其他方法来加载PNG资源?

小智 18

如果您使用的是VS2008或更高版本(MFC功能包),则可以使用CPngImage从中派生CBitmap并包含的内容<afxtoolbarimages.h>

#define AFX_PNG_RESOURCE_TYPE  _T("PNG")
Run Code Online (Sandbox Code Playgroud)


Roe*_*oel 5

LoadFromResource在内部使用LoadImage,不管文档说什么,它上次尝试时都不支持PNG.你可以链接到CxImage(看看codeproject)但是它的工作很少,实际上没什么好处.

我最后做的是忘记PNG,使用AlphaConv将PNG转换为32位Windows位图并使用CImage.另外一个好处是你可以在MFC中使用CBitmapButton等而不需要任何转换.

另一种破解方法是将资源内容提取到临时文件,然后使用CImage :: Load从那里读取它.如果我抓住你在我的一个代码库中这样做,我会打你的脸;但是;)

  • 对于真正打算捍卫其代码库的开发人员来说,+1 (2认同)