从几篇文章拼出来的,自己存一份
{
HWND hWnd = GetConsoleWindow();
HDC hDc, hDcMem;
hDc = GetDC(hWnd);
hDcMem = CreateCompatibleDC(hDc);
BITMAP bitmap;
GetObject(hBitmap, sizeof(BITMAP), &bitmap);
SelectObject(hDcMem, hBitmap);
BitBlt(hDc, 0, 0, bitmap.bmWidth, bitmap.bmWidth, hDcMem, 0, 0, SRCCOPY);
BITMAPINFOHEADER bitmapInfoHeader;
memset(&bitmapInfoHeader, 0, sizeof(bitmapInfoHeader));
bitmapInfoHeader.biBitCount = bitmap.bmBitsPixel;
bitmapInfoHeader.biWidth = bitmap.bmWidth;
bitmapInfoHeader.biHeight = -bitmap.bmHeight;
bitmapInfoHeader.biPlanes = 1;
bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biSizeImage = bitmap.bmWidthBytes * bitmap.bmHeight;
bitmapInfoHeader.biCompression = BI_RGB;
//BitBlt(hDcMem, 0, 0, 30, 30, hDc, 0, 0, SRCCOPY);
BYTE imgSize = bitmap.bmBitsPixel / 8;
char *pData = new char[bitmap.bmWidth*bitmap.bmWidth*imgSize];
int lines;
lines = GetDIBits(hDcMem, hBitmap, 0, bitmap.bmHeight, pData, (LPBITMAPINFO)&bitmapInfoHeader, DIB_RGB_COLORS); //写入图像信息
BITMAPFILEHEADER bitmapFileHeader;
bitmapFileHeader.bfReserved1 = 0;
bitmapFileHeader.bfReserved2 = 0;
bitmapFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + bitmapInfoHeader.biSizeImage;
bitmapFileHeader.bfType = 0x4d42;
bitmapFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
QByteArray byteArray;
byteArray.append((char*)&bitmapFileHeader, sizeof(BITMAPFILEHEADER)); //文件信息头
byteArray.append((char*)&bitmapInfoHeader, sizeof(BITMAPINFOHEADER)); //位图信息头
byteArray.append(pData, bitmapInfoHeader.biSizeImage); //位图信息数据
return byteArray;
}