日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC屏幕截图并保存为bmp文件

發布時間:2025/3/21 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC屏幕截图并保存为bmp文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
保存抓圖的簡單實現

實現類似的抓屏功能(簡單的截圖功能 )
其實只要兩個函數就行了,以下從網上摘抄的一段代碼的改寫, 算是原創吧

(http://www.wenyiwen.cn/a24/how161448.htm):

函數1: CopyScreenToBitmap //將屏幕指定區域存成圖片
HBITMAP CxxxDlg::CopyScreenToBitmap(LPRECT lpRect) //lpRect? 代表選定區域
{
?HDC hScrDC, hMemDC; ??
?//?
屏幕和內存設備描述表
?HBITMAP hBitmap,hOldBitmap; ??
?//?
位圖句柄
?int nX, nY, nX2, nY2; ??
?//?
選定區域坐標
?int nWidth, nHeight; ??
?//?
位圖寬度和高度
?int xScrn, yScrn; ??
?//?
屏幕分辨率
?//? 確保選定區域不為空矩形
?if (IsRectEmpty(lpRect))
? return NULL;
?//
為屏幕創建設備描述表
?hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
?//
為屏幕設備描述表創建兼容的內存設備描述表
?hMemDC = CreateCompatibleDC(hScrDC);
?//?
獲得選定區域坐標
?nX = lpRect->left;
?nY = lpRect->top;
?nX2 = lpRect->right;
?nY2 = lpRect->bottom;
?//?
獲得屏幕分辨率
?xScrn = GetDeviceCaps(hScrDC, HORZRES);
?yScrn = GetDeviceCaps(hScrDC, VERTRES);
?//
確保選定區域是可見的
?if (nX < 0)
? nX = 0;
?if (nY < 0)
? nY = 0;
?if (nX2 > xScrn)
? nX2 = xScrn;
?if (nY2 > yScrn)
? nY2 = yScrn;
?nWidth = nX2 - nX;
?nHeight = nY2 - nY;
?//?
創建一個與屏幕設備描述表兼容的位圖
?hBitmap=CreateCompatibleBitmap(hScrDC,nWidth,nHeight);
?//?
把新位圖選到內存設備描述表中
?hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);
?//?
把屏幕設備描述表拷貝到內存設備描述表中
?BitBlt(hMemDC,0,0, nWidth,nHeight,hScrDC, nX, nY, SRCCOPY);
?//
得到屏幕位圖的句柄
?hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap);
?//
清除
?DeleteDC(hScrDC);
?DeleteDC(hMemDC);
?//?
返回位圖句柄
?return hBitmap;
}
?
函數2 : SaveBitmapToFile 將圖片存成文件
int CxxxDlg::SaveBitmapToFile(HBITMAP hBitmap, LPSTR lpFileName) //hBitmap? 為剛才的屏幕位圖句柄
{ //lpFileName? 為位圖文件名
?HDC hDC; ??
? //
設備描述表
?int iBits; ??
?//
當前顯示分辨率下每個像素所占字節數
?WORD wBitCount; ??
? //
位圖中每個像素所占字節數
?// 定義調色板大小, 位圖中像素字節大小 , 位圖文件大小 , 寫入文件字節數
?DWORD dwPaletteSize=0,dwBmBitsSize,dwDIBSize, dwWritten;
?BITMAP Bitmap; ??
?//
位圖屬性結構
?BITMAPFILEHEADER bmfHdr; ??
?//
位圖文件頭結構
?BITMAPINFOHEADER bi; ??
?//
位圖信息頭結構
?LPBITMAPINFOHEADER lpbi; ??
?//
指向位圖信息頭結構
? HANDLE fh, hDib, hPal;
?HPALETTE hOldPal=NULL;
?//
定義文件,分配內存句柄,調色板句柄
??
?//
計算位圖文件每個像素所占字節數
?hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
?iBits = GetDeviceCaps(hDC, BITSPIXEL) *
? GetDeviceCaps(hDC, PLANES);
?DeleteDC(hDC);
?if (iBits <= 1)
? wBitCount = 1;
?else if (iBits <= 4)
? wBitCount = 4;
?else if (iBits <= 8)
? wBitCount = 8;
?else if (iBits <= 24)
? wBitCount = 24;
else
? wBitCount = 32;
?//
計算調色板大小
?if (wBitCount <= 8)
? dwPaletteSize=(1<<wBitCount)*sizeof(RGBQUAD);
??
?//
設置位圖信息頭結構
?GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
?bi.biSize = sizeof(BITMAPINFOHEADER);
?bi.biWidth = Bitmap.bmWidth;
?bi.biHeight = Bitmap.bmHeight;
?bi.biPlanes = 1;
?bi.biBitCount = wBitCount;
?bi.biCompression = BI_RGB;
?bi.biSizeImage = 0;
?bi.biXPelsPerMeter = 0;
?bi.biYPelsPerMeter = 0;
?bi.biClrUsed = 0;
?bi.biClrImportant = 0;
??
?dwBmBitsSize = ((Bitmap.bmWidth*wBitCount+31)/32)*4*Bitmap.bmHeight;
?//
為位圖內容分配內存

/*xxxxxxxx 計算位圖大小分解一下(解釋一下上面的語句 )xxxxxxxxxxxxxxxxxxxx??
//每個掃描行所占的字節數應該為4的整數倍,具體算法為
:
?int biWidth = (Bitmap.bmWidth*wBitCount) / 32;
?if((Bitmap.bmWidth*wBitCount) % 32)
? biWidth++; //不是整數倍的加
1
?biWidth *= 4;//到這里,計算得到的為每個掃描行的字節數。

?dwBmBitsSize = biWidth * Bitmap.bmHeight;// 得到大小
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/


?hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
?lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
?*lpbi = bi;
?//?
處理調色板 ???
?hPal = GetStockObject(DEFAULT_PALETTE);
?if (hPal)
?{
? hDC = ::GetDC(NULL);
? hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE);
? RealizePalette(hDC);
?}
?// 獲取該調色板下新的像素值

?GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize, (BITMAPINFO *)lpbi,DIB_RGB_COLORS);
?//
恢復調色板 ???
?if (hOldPal)
?{
? SelectPalette(hDC, hOldPal, TRUE);
? RealizePalette(hDC);
? ::ReleaseDC(NULL, hDC);
?}
?//創建位圖文件
???
?fh=CreateFile(lpFileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
?if (fh==INVALID_HANDLE_VALUE)
? return FALSE;
?// 設置位圖文件頭

?bmfHdr.bfType = 0x4D42; // "BM"
?dwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize;??
?bmfHdr.bfSize = dwDIBSize;
?bmfHdr.bfReserved1 = 0;
?bmfHdr.bfReserved2 = 0;
?bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwPaletteSize;
?//?
寫入位圖文件頭
?WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
?//?
寫入位圖文件其余內容
? WriteFile(fh, (LPSTR)lpbi, sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize , &dwWritten, NULL);
?//
清除 ???
?GlobalUnlock(hDib);
?GlobalFree(hDib);
?CloseHandle(fh);
?return TRUE;
}

3.使用舉例
:
1> 截取保存當前運行程序的畫面

CRect rect;
GetWindowRect(&rect);
HBITMAP hMap = CopyScreenToBitmap(rect);
SaveBitmapToFile(hMap,"C:\\seu07201213(
汪洋中的一片葉子 ).bmp");

2> 全屏截圖

CRect rect;
rect.left = 0;
rect.top = 0;
rect.right = GetSystemMetrics(SM_CXSCREEN);
rect.bottom = GetSystemMetrics(SM_CYSCREEN);
HBITMAP hMap = CopyScreenToBitmap(rect);

SaveBitmapToFile(hMap,"C:\\seu07201213(汪洋中的一片葉子).bmp");


from:?http://blog.csdn.net/masibuaa/article/details/7659657

總結

以上是生活随笔為你收集整理的VC屏幕截图并保存为bmp文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 电车痴汉在线观看 | 韩国三级hd两男一女 | 999福利视频 | 亚洲精品视频大全 | 欧美日韩高清在线播放 | 99在线小视频 | 美女啪啪免费视频 | 亚洲永久免费av | 国产黄色免费在线观看 | 日本美女性爱视频 | 人妻无码一区二区三区四区 | 免费精品视频一区二区三区 | 日韩av三级在线 | 91在线欧美 | 男人插入女人阴道视频 | 小俊大肉大捧一进一出好爽 | 春物催眠 | 国产精品视频你懂的 | 日韩字幕在线 | 亚洲精品777| 岛国精品在线观看 | 在线观看一区二区三区视频 | 最新中文字幕在线 | 久久精品久久久久久久 | 免费视频久久 | xxxwww18| www狠狠 | 中文字字幕码一二三区 | 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 国产绳艺sm调教室论坛 | 亚洲爽爽网 | 欧美毛茸茸 | 久久99久久久久 | 欧美激情综合色综合啪啪五月 | 免费观看一级一片 | 亚洲精品视频91 | 亚洲AV无码一区二区三区少妇 | 麻豆成人免费 | 国产69精品久久久久久 | 仙踪林久久久久久久999 | 亚洲涩综合| 黄色专区 | 日韩免费在线视频 | 一级片亚洲| 国产高清无遮挡 | www.天堂av | 91麻豆影院| 天天天综合网 | 国产av电影一区二区 | 国产视频综合 | 手机av免费在线观看 | 91精品欧美 | 日本成人在线免费视频 | 欧美在线一二三四区 | 亚欧美在线观看 | 国产高清视频网站 | 久草免费福利视频 | 神秘马戏团在线观看免费高清中文 | 国产成人免费在线视频 | www久久久天天com | 国产女人在线 | 帮我拍拍漫画全集免费观看 | 黄频在线播放 | 久久久久久久福利 | 国产精品入口夜色视频大尺度 | 91视频地址 | 午夜在线观看视频网站 | 人妻无码一区二区三区免费 | 免费av大全 | 欧美草比视频 | 国产亚洲久一区二区 | 中文字幕第九页 | 国产区精品在线观看 | 国产精品视频大全 | 国产经典三级 | 亚色成人 | 烈性摔跤| 麻豆短视频 | 亚洲一区免费视频 | 欧美双性人妖o0 | 久久ww| 91美女高潮出水 | 亚洲高清在线观看 | 成人免费无码大片a毛片 | www黄色在线观看 | 在线a毛片 | 国产精品久久久久毛片大屁完整版 | 色偷偷资源 | 三年中文免费观看大全动漫 | 亚洲天堂福利 | 9色视频 | 欧洲av一区二区三区 | 国产成人在线观看免费 | 免费在线色 | 日韩欧美不卡视频 | 动漫玉足吸乳羞免费网站玉足 | 美日韩精品 | 欧美精品免费视频 | 欧美久久一区二区 |