c++ - 从资源加载 png 文件(无需 MFC、ATL)

标签 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 和 ATL 的。如何编写非MFC风格加载png?据我了解,这个目的可以通过GDI+来实现

编辑:有一个适当的implementation加载pngthe 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/

相关文章:

delphi - 如何防止用户单击时激活表单?

c++ - '$OutDir'在Visual Studio的脚本文件中定义在哪里?

c++ - 如何在无限循环中运行线程

具有成员初始化器语法和已删除复制构造函数的 C++ auto

c++ - 读取字符串和整数

c++ - 在 C++ 或 C 中获取当前鼠标光标图像

winapi - 路径前面的 "\\?\"是什么意思?

c++ - 为什么我得到未引用的局部变量

windows - CSingleLock 实现在 Windows 7 上工作正常,但在 Win XP 上以死锁结束

c++ - 创建一个新文件避免竞争条件