c++ gdi+ 根据 资源id 使bitmap加载 png图片 对象
时间: 2024-03-11 18:50:19 浏览: 110
使用GDI+函数从资源中加载图片
5星 · 资源好评率100%
可以使用以下代码实现:
```cpp
#include <Windows.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
// 加载 PNG 图片资源
Gdiplus::Bitmap* LoadPngFromResource(int resourceId)
{
HINSTANCE hInstance = GetModuleHandle(NULL);
HRSRC hRes = FindResource(hInstance, MAKEINTRESOURCE(resourceId), L"PNG");
DWORD imageSize = SizeofResource(hInstance, hRes);
HGLOBAL hGlobal = LoadResource(hInstance, hRes);
LPVOID imageResourceData = LockResource(hGlobal);
IStream* pStream = NULL;
HRESULT hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream);
hr = pStream->Write(imageResourceData, imageSize, NULL);
pStream->Seek({0}, STREAM_SEEK_SET);
Gdiplus::Bitmap* pBitmap = Gdiplus::Bitmap::FromStream(pStream);
pStream->Release();
FreeResource(hGlobal);
return pBitmap;
}
// 使用示例
int main()
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Gdiplus::Bitmap* pBitmap = LoadPngFromResource(IDB_PNG1);
if (pBitmap != NULL)
{
// TODO: 使用 pBitmap 进行绘制等操作
delete pBitmap;
}
Gdiplus::GdiplusShutdown(gdiplusToken);
return 0;
}
```
其中 `IDB_PNG1` 是 PNG 图片资源的资源 ID,需要根据自己的实际情况修改。此外,代码中还需要包含 `resource.h` 头文件,以便使用资源 ID 宏定义。
阅读全文