我想从资源加载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}}
答案 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。