c++ gdi+ 根据 资源id 加载 Bitmap 对象
时间: 2024-03-11 22:49:39 浏览: 180
Android中利用C++处理Bitmap对象的实现方法
你可以使用以下代码来根据资源ID加载Bitmap对象:
```c++
HINSTANCE hInstance = GetModuleHandle(NULL); // 获取当前程序实例句柄
HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resourceId), RT_BITMAP); // 查找资源
HGLOBAL hMemory = LoadResource(hInstance, hResource); // 加载资源
LPVOID lpAddress = LockResource(hMemory); // 锁定资源
HBITMAP hBitmap = CreateBitmapFromMemory(lpAddress); // 从内存中创建Bitmap对象
```
其中,`resourceId`为资源ID,`CreateBitmapFromMemory`是自定义的函数,实现从内存中创建Bitmap对象的操作。具体实现可以参考以下代码:
```c++
HBITMAP CreateBitmapFromMemory(LPVOID lpAddress)
{
BITMAPINFOHEADER bmih = { 0 };
bmih.biSize = sizeof(bmih);
bmih.biWidth = 100; // 图像宽度
bmih.biHeight = 100; // 图像高度(正数表示从上到下,负数表示从下到上)
bmih.biPlanes = 1;
bmih.biBitCount = 24; // 每像素位数
bmih.biCompression = BI_RGB;
BITMAPINFO bmi = { 0 };
bmi.bmiHeader = bmih;
LPVOID pBits = NULL;
HDC hdc = GetDC(NULL); // 获取屏幕设备上下文句柄
HBITMAP hBitmap = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, &pBits, NULL, 0); // 创建DIB位图
ReleaseDC(NULL, hdc); // 释放设备上下文句柄
memcpy(pBits, lpAddress, bmih.biSizeImage); // 将内存中的图像数据复制到位图中
return hBitmap;
}
```
这样,你就可以根据资源ID加载Bitmap对象了。
阅读全文