【vc++】如何将MoveTo等函数绘制的线条保存为BMP格式

来源:百度知道 编辑:UC知道 时间:2024/05/25 15:15:01
比如建立一个MDI程序

使用了MoveTo,LineTo,Rectangel等等函数画线,但是怎么能把这些保存为位图格式啊??

其实就是说白了,就好比Windows画图板是怎么实现保存的

之前看过什么位图打开,保存之类,不知道怎么应用到这方面上去

建一个DC 把窗口上的画面拷贝过去

// 保存窗口上的画面为32位bmp,细节方面自己控制
HDC hSrcDC = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
HDC hMemDC = CreateCompatibleDC(hSrcDC);
RECT rect;

GetClientRect(hwnd, &rect); // 得到客户区矩形

BITMAPFILEHEADER bmHeader; // 位图文件头
BITMAPINFOHEADER bmInfHdr; // 位图信息头

memset(&bmHeader, 0, sizeof(BITMAPFILEHEADER));
memset(&bmInfHdr, 0, sizeof(BITMAPINFOHEADER));

bmHeader.bfType = 19778; // "BM", 0x424D
bmHeader.bfSize = 54 + (rect.right * rect.bottom << 2); // 文件大小 = 文件头大小(14) + 信息头大小(40) + 像素大小
bmHeader.bfOffBits = 54; // 像素起始位置

bmInfHdr.biSize = sizeof(BITMAPINFOHEADER); // 结构大小
bmInfHdr.biWidth = rect.right; // 宽
bmInfHdr.biHeight = rect.bottom; // 高
bmInfHdr.biPlanes = 1;
bmInfHdr.biBitCount = 32; // 32bit/pixel
bmInfHdr.biCompression = BI_RGB;

HBITMAP hBitmap = CreateCompatibleBitmap(hSrcDC, rect.right, rect.bottom);