日韩性视频-久久久蜜桃-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文件的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 丰满人妻妇伦又伦精品国产 | 欧美yyy | 亚洲熟女少妇一区二区 | 疯狂做受xxxx高潮人妖 | 一道本在线播放 | 亚洲自拍中文 | 黄色免费网站在线 | 男人舔女人下部高潮全视频 | 美女网站免费视频 | 男女三级视频 | www.99re.| 成人黄色短视频在线观看 | 国产成人精品免高潮在线观看 | 欧美大浪妇猛交饥渴大叫 | 91精品国产日韩91久久久久久 | 一直草| 久久不卡影院 | 三上悠亚ssⅰn939无码播放 | 无套白嫩进入乌克兰美女 | 在线日韩欧美 | 亚洲国产日韩一区无码精品久久久 | 美国黄色一级大片 | 91好色先生tv| 成人动漫av | 自拍偷拍 亚洲 | 久久久久久国产精品三区 | 三级色网 | 色鬼久久 | 青青草日韩 | 亚洲影院一区二区三区 | 国产精品成人一区 | 91丝袜国产在线观看 | 日日嗨av一区二区三区四区 | 国产欧美日韩精品一区 | 亚洲毛片视频 | 国产女厕一区二区三区在线视 | 精品人妻一区二区三区香蕉 | 久久久久久五月天 | 亚洲色p| 日韩精品免费在线观看 | 日韩成人黄色片 | 亚洲一区在线电影 | 大胸喷奶水www视频妖精网站 | 米奇影视第四色 | 日韩av在线资源 | 男人的天堂在线播放 | 国产第9页| 岛国精品在线 | 中文字幕超清在线观看 | 欧美亚洲二区 | 国产一级片播放 | 大又大粗又爽又黄少妇毛片 | 俺也去综合 | 韩日精品在线 | 欧美精品三级 | 日韩一区二区三区免费在线观看 | 免费一级a毛片夜夜看 | 欧美日韩乱国产 | 欧美一级爱爱 | 无码内射中文字幕岛国片 | 亚洲国产精品久久久久婷婷老年 | 亚洲综合在线一区二区 | 欧美 日韩 人妻 高清 中文 | 男人天堂2019 | 欧美视频免费 | 亚洲欧美综合久久 | 国产 日韩 欧美 在线 | 丰满孕妇性春猛交xx大陆 | 极品超粉嫩尤物69xx | 久久婷婷视频 | 国产无遮挡一区二区三区毛片日本 | 精品在线观看一区二区 | 亚洲资源网站 | 温柔少妇的高潮呻吟 | 国产麻豆一区二区 | 天天碰天天干 | 日日摸夜夜添狠狠添欧美 | 肉色超薄丝袜脚交一区二区图片 | 亚洲成av人影院 | 国产在线视频第一页 | 加勒比综合网 | 伊人222成人综合网 亚洲日本中文 | 白石茉莉奈番号 | 欧美r级在线观看 | 污网站免费在线观看 | 一级看片| 久久老熟女一区二区三区 | 欧美日韩黄色片 | 日本国产精品 | 久久久久亚洲AV成人网人人小说 | 久久亚洲AV成人无码国产人妖 | 日本美女性高潮 | 91精选国产 | 性做爰裸体按摩视频 | 超碰av在线播放 | 夜夜噜噜噜 | www.欧美一区二区三区 | 一本色道久久综合 | 国产主播精品 |