下面是相关的代码实现:(这里我保存的DIB位图的大小为320*240,深度为24位)
void SaveToBmpAndBlend(BYTE *buffer) { HDC hdc; //获取屏幕显示DC hdc = GetDC(m_hWnd); //创建内存DC HDC hdcMem = CreateCompatibleDC(hdc); //创建一个bmp内存空间 HBITMAP hBmp; BITMAPINFO bmpinfo; bmpinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); bmpinfo.bmiHeader.biWidth=320; bmpinfo.bmiHeader.biHeight=240; bmpinfo.bmiHeader.biPlanes=1; bmpinfo.bmiHeader.biBitCount=24; bmpinfo.bmiHeader.biCompression=BI_RGB; bmpinfo.bmiHeader.biSizeImage=320*240*3; bmpinfo.bmiHeader.biXPelsPerMeter=0; bmpinfo.bmiHeader.biClrImportant=0; bmpinfo.bmiHeader.biClrUsed=0; BYTE* pDibs = NULL; //需要注意,当第5个参数为NULL时,PDibs指向的是一块新申请的内存,需要在外部将缓冲数据复制到这块新内存中。 hBmp=CreateDIBSection(hdcMem,&bmpinfo,DIB_RGB_COLORS,(void**) &pDibs,NULL,0); for (int i=0;i<320*240*3;i++) { pDibs[i]=buffer[i]; } //将bmp内存空间分配给内存DC HGDIOBJ hOldSel = SelectObject(hdcMem,hBmp); //将内存DC的内容复制到屏幕显示DC中,完成显示 BitBlt(hdc,0,0,320,240,hdcMem,0,0,SRCCOPY);//SRCCOPY 完全覆盖 //清除资源 SelectObject(hdcMem,hOldSel); DeleteDC(hdcMem); ReleaseDC(m_hWnd, hdc); }