mfc 显示BITMAPINFO
时间: 2023-08-04 17:07:05 浏览: 154
MFC bitmap
MFC中可以使用CBitmap类来显示BITMAPINFO格式的图像。具体步骤如下:
1. 定义一个BITMAPINFO结构体,并初始化其中的成员变量,例如:
```cpp
BITMAPINFO bmpInfo;
ZeroMemory(&bmpInfo, sizeof(BITMAPINFO));
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = 640; // 图像宽度
bmpInfo.bmiHeader.biHeight = -480; // 图像高度(负数表示倒置)
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 24; // 每个像素点占用的位数,此处为24位真彩色
bmpInfo.bmiHeader.biCompression = BI_RGB;
```
2. 加载图像数据到内存中,例如:
```cpp
BYTE* pImgData = new BYTE[640 * 480 * 3]; // 图像数据大小为640*480*3字节
// 从文件中读取图像数据
FILE* fp = fopen("test.bmp", "rb");
fseek(fp, 54, SEEK_SET); // BMP文件头大小为54字节
fread(pImgData, 1, 640 * 480 * 3, fp);
fclose(fp);
```
3. 创建一个CBitmap对象,并使用SetBitmapBits函数将图像数据传入,例如:
```cpp
CBitmap bmp;
bmp.CreateBitmap(640, 480, 1, 24, pImgData);
bmp.SetBitmapBits(640 * 480 * 3, pImgData);
```
4. 将CBitmap对象显示在界面上,例如:
```cpp
CClientDC dc(this); // 获取当前窗口的设备上下文
CDC memDC;
memDC.CreateCompatibleDC(&dc); // 创建一个与设备上下文兼容的内存上下文
memDC.SelectObject(&bmp); // 将CBitmap对象选入内存上下文
dc.BitBlt(0, 0, 640, 480, &memDC, 0, 0, SRCCOPY); // 将内存上下文中的图像复制到设备上下文中显示
```
完整示例代码如下:
```cpp
BITMAPINFO bmpInfo;
ZeroMemory(&bmpInfo, sizeof(BITMAPINFO));
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = 640;
bmpInfo.bmiHeader.biHeight = -480;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 24;
bmpInfo.bmiHeader.biCompression = BI_RGB;
BYTE* pImgData = new BYTE[640 * 480 * 3];
FILE* fp = fopen("test.bmp", "rb");
fseek(fp, 54, SEEK_SET);
fread(pImgData, 1, 640 * 480 * 3, fp);
fclose(fp);
CBitmap bmp;
bmp.CreateBitmap(640, 480, 1, 24, pImgData);
bmp.SetBitmapBits(640 * 480 * 3, pImgData);
CClientDC dc(this);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&bmp);
dc.BitBlt(0, 0, 640, 480, &memDC, 0, 0, SRCCOPY);
delete[] pImgData;
```
阅读全文