我想从资源加载 PNG 文件。有一个大致的 MFC 方式(使用 CResourceStream ):
CImage img;
CResourceStream str(0, MAKEINTRESOURCE(id), _T("PNG"));
img.Load(&str);
CBitmap *bmp(CBitmap::FromHandle(img.operator HBITMAP());
但是项目是没有 MFC 和 ATL 的。如何编写非MFC风格加载png?据我了解,这个目的可以通过GDI+来实现
编辑:有一个适当的implementation加载png
从the answer流式传输
最佳答案
嗯,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。
关于c++ - 从资源加载 png 文件(无需 MFC、ATL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11152804/