从资源加载png文件(不含MFC,ATL)

时间:2012-06-22 08:36:56

标签: c++ winapi visual-c++ gdi+ gdi

我想从资源加载PNG文件。有一个大致MFC方式(CResourceStream):

CImage img;
CResourceStream str(0, MAKEINTRESOURCE(id), _T("PNG"));
img.Load(&str);
CBitmap *bmp(CBitmap::FromHandle(img.operator HBITMAP());

但是一个项目是MFC-less和ATL-less。如何写入非MFC样式加载png?据我了解,这个目的可以通过GDI +

来实现

编辑: 从[{3}}

流式传输的png implementation加载{{1}}

1 个答案:

答案 0 :(得分:2)

嗯,GDI +可以轻松地从IStream或文件中的PNG数据创建HBITMAP,但从资源到IStream需要一些工作。

如果你调用CreateStreamOnHGlobal(NULL,TRUE,& stm),其中stm是一个IStream *变量,它基本上会给你一个临时的内存中流。您可以使用FindResource,LoadResource,LockResource和SizeofResource来获取指向资源数据及其大小的指针。一旦掌握了这两个功能,就可以使用IStream :: Write将资源中的数据复制到IStream中。

获得带有PNG数据的IStream后,将IStream传递给GDI + Bitmap constructor,然后使用GetHBITMAP method获取HBITMAP。