📄 保存位图.txt
字号:
#include <math.h>
void CSaveBitmap::SaveBitmap(HWND hwnd,CString strSaveFile)
{
CBitmap *pBitmapOld,bitmap;
CDC cdc,memdc;
CRect rect;
/*
if(hwnd)
::GetWindowRect(hwnd,&rect);
else
GetWindowRect(hwnd,rect);
*/
int width = ::GetSystemMetrics(SM_CXSCREEN);
int height = ::GetSystemMetrics(SM_CYSCREEN);
HDC hdc = ::CreateDC("DISPLAY",NULL,NULL,NULL);
HDC hmemdc;
cdc.Attach(hdc);
hmemdc = ::CreateCompatibleDC(NULL);
memdc.Attach(hmemdc);
bitmap.CreateCompatibleBitmap(&cdc,width,height);
pBitmapOld = memdc.SelectObject(&bitmap);
memdc.BitBlt(0,0,width,height,&cdc,0,0,SRCCOPY);
memdc.SelectObject(pBitmapOld);
CFile file(strSaveFile,CFile::modeCreate|CFile::modeWrite);
BITMAP bInfo;
bitmap.GetBitmap(&bInfo);
//计算调色板大小
int panelsize = 0;
if (bInfo.bmBitsPixel<24) //非真彩色
{
panelsize = (int)pow(2,bInfo.bmBitsPixel)*sizeof(RGBQUAD);
}
//定义位图信息
BITMAPINFO* bMapInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize);
bMapInfo->bmiHeader.biBitCount = bInfo.bmBitsPixel;
bMapInfo->bmiHeader.biClrImportant = 0;
bMapInfo->bmiHeader.biCompression = 0;
bMapInfo->bmiHeader.biHeight = bInfo.bmHeight;
bMapInfo->bmiHeader.biPlanes = bInfo.bmPlanes;
bMapInfo->bmiHeader.biSize = sizeof(BITMAPINFO);
bMapInfo->bmiHeader.biSizeImage = bInfo.bmHeight*bInfo.bmWidthBytes;
bMapInfo->bmiHeader.biWidth = bInfo.bmWidth;
bMapInfo->bmiHeader.biXPelsPerMeter = 0;
bMapInfo->bmiHeader.biYPelsPerMeter = 0;
//获取位图的实际数据
char* pData = new char[bMapInfo->bmiHeader.biSizeImage];
int len = GetDIBits(hdc,bitmap,0,bInfo.bmHeight,pData,bMapInfo,DIB_RGB_COLORS);
BITMAPFILEHEADER bFileHeader;
bFileHeader.bfType = 0x4D42;
bFileHeader.bfReserved1 = 0;
bFileHeader.bfReserved2 = 0;
bFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
bFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize;
//向文件中写入位图数据
file.WriteHuge(&bFileHeader,sizeof(BITMAPFILEHEADER));
file.WriteHuge(&bMapInfo->bmiHeader,sizeof(BITMAPINFOHEADER));
file.WriteHuge(pData,bMapInfo->bmiHeader.biSizeImage+panelsize);
file.Close();
delete pData;
LocalFree(bMapInfo);
bitmap.DeleteObject();
cdc.DeleteDC();
memdc.DeleteDC();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -