?? 保存位圖.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);
//計(jì)算調(diào)色板大小
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;
//獲取位圖的實(shí)際數(shù)據(jù)
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;
//向文件中寫入位圖數(shù)據(jù)
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();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -