在windows下将数据以位图的方式显示:
//变量定义
HWND hWnd; //窗口句柄定义
HDC hdc_mem; //缓冲句柄
HBITMAP screen_hb ; // DIB
HBITMAP screen_ob ; // 老的 BITMAP
void* buffer; //数据存储区
BITMAPINFO bi = { { sizeof(BITMAPINFOHEADER), 100, 100, 1, 24, BI_RGB,
100 * 100 * 3, 0, 0, 0, 0 } };
//初始化配置
HDC hdc = GetDC(hWnd);
hdc_mem = CreateCompatibleDC(hdc);
screen_hb = CreateDIBSection(hdc_mem, &bi, DIB_RGB_COLORS, (void**)&buffer, NULL, 0);
if (screen_hb == NULL) return -3;
screen_ob = (HBITMAP)SelectObject(hdc_mem, screen_hb);
ReleaseDC(hWnd, hdc);
//显示数据 dat为位图数据指针,size为1像素所占字节大小
ImageLoad(void* dat, int width, int height,int size)
{
if (hdc_mem && screen_hb)
{
HDC hDC = GetDC(hWnd);
memcpy(buffer, dat, width * height * size);
BitBlt(hDC, 0, 0, width, height, hdc_mem, 0, 0, SRCCOPY);
ReleaseDC(hWnd, hDC);
}
}
CreateDIBSection函数中的第四个参数非常重要,这个参数是一个指针,指向存储位图数据的一块内存。我们传递给函数一个指针变量后,函数自动分配一块内存出来,这块内存自动分配,自动释放。在配置好后,我们将位图数据放置到这块内存中,在调用BitBlt就可以显示图像了。
做这个的原因是,自己准备学习3d render需要显示,如果加载QT\SDL库有点大材小用,并且网上一些其他的用来显示的加了很多其他功能代码,总体的代码量有点多。