在Windows的C小程序中显示BMP图像,可以通过以下步骤实现:
#include <Windows.h>
#pragma comment(lib, "Gdi32.lib")
HWND hWnd = CreateWindow(
"MyWindowClass", // 窗口类名
"BMP Image Viewer", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // 窗口位置
CW_USEDEFAULT, CW_USEDEFAULT, // 窗口大小
NULL, NULL, hInstance, NULL
);
HBITMAP hBitmap = (HBITMAP)LoadImage(
NULL, // 实例句柄,为NULL表示从文件加载
"image.bmp", // BMP图像文件路径
IMAGE_BITMAP, // 图像类型
0, 0, // 宽度和高度,为0表示使用原始大小
LR_LOADFROMFILE // 加载选项
);
HDC hdc = GetDC(hWnd); // 获取窗口的设备上下文
HDC hdcMem = CreateCompatibleDC(hdc); // 创建与窗口设备上下文兼容的内存设备上下文
SelectObject(hdcMem, hBitmap); // 将位图对象选入内存设备上下文
// 获取位图的宽度和高度
BITMAP bm;
GetObject(hBitmap, sizeof(BITMAP), &bm);
// 将位图绘制到窗口设备上下文中
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
DeleteDC(hdcMem); // 释放内存设备上下文
ReleaseDC(hWnd, hdc); // 释放窗口设备上下文
完整的示例代码如下:
#include <Windows.h>
#pragma comment(lib, "Gdi32.lib")
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HBITMAP hBitmap = (HBITMAP)LoadImage(
NULL, // 实例句柄,为NULL表示从文件加载
"image.bmp", // BMP图像文件路径
IMAGE_BITMAP, // 图像类型
0, 0, // 宽度和高度,为0表示使用原始大小
LR_LOADFROMFILE // 加载选项
);
HDC hdcMem = CreateCompatibleDC(hdc); // 创建与窗口设备上下文兼容的内存设备上下文
SelectObject(hdcMem, hBitmap); // 将位图对象选入内存设备上下文
// 获取位图的宽度和高度
BITMAP bm;
GetObject(hBitmap, sizeof(BITMAP), &bm);
// 将位图绘制到窗口设备上下文中
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
DeleteDC(hdcMem); // 释放内存设备上下文
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MyWindowClass";
wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);
if (!RegisterClassEx(&wcex))
{
MessageBox(NULL, "窗口类注册失败!", "错误", MB_ICONERROR);
return 1;
}
// 创建窗口
HWND hWnd = CreateWindow(
"MyWindowClass", // 窗口类名
"BMP Image Viewer", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, CW_USEDEFAULT, // 窗口位置
CW_USEDEFAULT, CW_USEDEFAULT, // 窗口大小
NULL, NULL, hInstance, NULL
);
if (!hWnd)
{
MessageBox(NULL, "窗口创建失败!", "错误", MB_ICONERROR);
return 1;
}
// 显示窗口
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
请注意,以上示例代码仅展示了如何在Windows的C小程序中显示BMP图像,并未涉及云计算相关内容。
领取专属 10元无门槛券
手把手带您无忧上云