MFC 加载并绘制 RES 资源中的 BMP 图片
以下是一个示例代码,用于读取 res 中的 5 张 bmp 图片,计算位图的宽度和高度,并加载出来画在规定坐标上,并对使用的变量进行回收处理:
#include <afxres.h>
void LoadAndDrawBitmap(int x, int y, HINSTANCE hInstance, int resourceId) {
HBITMAP hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(resourceId));
if (hBitmap != NULL) {
BITMAP bmp;
GetObject(hBitmap, sizeof(BITMAP), &bmp);
int width = bmp.bmWidth;
int height = bmp.bmHeight;
HDC hDC = GetDC(NULL);
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
BitBlt(hDC, x, y, width, height, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hOldBitmap);
DeleteDC(hMemDC);
ReleaseDC(NULL, hDC);
DeleteObject(hBitmap);
}
}
int main() {
HINSTANCE hInstance = AfxGetInstanceHandle();
LoadAndDrawBitmap(0, 0, hInstance, IDB_BITMAP1); // 加载并画第一个位图
LoadAndDrawBitmap(100, 0, hInstance, IDB_BITMAP2); // 加载并画第二个位图
LoadAndDrawBitmap(200, 0, hInstance, IDB_BITMAP3); // 加载并画第三个位图
LoadAndDrawBitmap(300, 0, hInstance, IDB_BITMAP4); // 加载并画第四个位图
LoadAndDrawBitmap(400, 0, hInstance, IDB_BITMAP5); // 加载并画第五个位图
return 0;
}
在上面的示例代码中,我们使用了LoadBitmap函数来加载 bmp 位图资源,并使用GetObject函数获取位图的宽度和高度。然后,我们创建了一个兼容设备上下文(hMemDC),并将位图对象(hBitmap)选入该上下文中。最后,我们使用BitBlt函数将位图绘制到屏幕上。
在使用完位图和设备上下文后,我们需要进行变量的回收处理。这里我们使用了SelectObject函数将原来的位图对象选回到设备上下文中,并使用DeleteDC函数删除设备上下文。最后,我们使用DeleteObject函数删除位图对象。
请注意,上述示例代码中的IDB_BITMAP1、IDB_BITMAP2等是位图资源的 ID,需要根据实际情况进行修改。另外,这里的代码是在 MFC 环境下编写的,如果你的项目不是 MFC 项目,可能需要做一些调整。
原文地址: https://www.cveoy.top/t/topic/ha91 著作权归作者所有。请勿转载和采集!