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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

屏幕抓取程序 (位图DDB的例子)

發(fā)布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 屏幕抓取程序 (位图DDB的例子) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

屏幕抓取程序的意思是將整個屏幕圖顯示在應用程序的用戶區(qū)中,等價于截圖。

對桌面窗口的操作:
首先得知道桌面窗口的寬和高,獲取寬和高需要利用窗口的設備句柄,而獲取設備句柄需要知道窗口句柄,這一系列的連串關系如下:
窗口句柄——>設備句柄——>獲取設備句柄屬性(比如寬和高)。(書本采用的一種方法,但至少也把這種種被需要的關系復習了一下,必須承認,初學需要重復很多次才能形成熟練意識)

hwndDeskTop = GetDesktopWindow();// 獲取桌面窗口的窗口句柄 hdcDeskTop = GetDC(hwndDeskTop);// 創(chuàng)建基本桌面窗口的設備描述表

這里借用兩個函數(shù),另外還有一種方法,直接創(chuàng)建一個桌面窗口設備的DC

hdcDeskTop = CreateDC("DISPLAY",NULL,NULL,NULL);//CreateDC()獲得整個屏幕的DC,一步到位

有了句柄之后,就可以獲得(或設置)這個DC的各種屬性,比如,有多寬,多高等等....通過函數(shù)GetDeviceCaps()實現(xiàn)。摘抄函數(shù)原型如下:

int GetDeviceCaps(HDC hdc; //設備DCint nIndex; //返回的索引項 );

設備DC的信息很多,因此,nIndex的項尤其多。在這個例子只需要得到屏幕的寬和高。

cxScreen = GetDeviceCaps(hdcDeskTop, HORZRES); // 獲取桌面窗口的大小,也相當于矩形右下角的x,y坐標 cyScreen = GetDeviceCaps(hdcDeskTop, VERTRES);

?

接下來的這套流程比較繁雜,但是用最簡易的方式描述,得到屏幕DC之后,再創(chuàng)建一個兼容DC(兼容屏幕設備),和一個兼容位圖(兼容屏幕),將兼容位圖放置在兼容DC中,準備用它來存放屏幕的位圖。可以通俗的理解為是一個容器么?兼容DC容納兼容位圖。

hdcMem = CreateCompatibleDC(hdcDeskTop); // 創(chuàng)建與顯示設備描述表兼容的內存設備描述表 hBitmap = CreateCompatibleBitmap( hdcDeskTop, cxScreen, cyScreen); SelectObject(hdcMem, hBitmap);//并選入內存設備描述表

設備已經就緒,最后將屏幕的位圖移動到兼容DC中的兼容位圖上。

BitBlt(hdcMem, 0, 0, cxScreen, cyScreen,hdcDeskTop, 0, 0 ,SRCCOPY);

再看來BitBlt()函數(shù),摘抄如下:

BOOL BitBlt( HDC hDCDest,//目標設備描述表 int nXDest,//目標矩形左上角x坐標 int nYDest,//目標矩形左上角y坐標 int nWidth,//目標矩形寬 int nHeight,//目標矩形高 HDC hDCSrc,//源設備描述表 int nXDSrc,//源矩形x坐標(左上角) int nYDSrc,//源矩形y坐標 DWORD dwRop //執(zhí)行的光柵操作 );

其中最后一條DWORD dwRop光柵操作,讓我聯(lián)想起C語言的圖形復制,就是在復制的過程中,如何與目標進行某種混合操作,比如讓它反色(黑變白,白變黑),OR,異或操作等等,大概就是這個意思。

兼容內存設備描述表——>應用程序設備描述表

內存設備描述表的工作已經完成,接著,再把這個內存設備描述表中的位圖復制到當前應用程序的用戶區(qū)中,并讓它顯示。
即:兼容內存描述表——>應用程序設備描述表。

書本在這里考慮這樣一個問題,讓位圖適當縮放來適應用戶區(qū)的大小,于是采用了另一種復制函數(shù)StretchBlt。它的參數(shù)與BitBlt大部分相似,省略。
但是,在縮放之前,又設置了一個縮放模式,通過函數(shù)SetStretchBltMode實現(xiàn),摘抄如下:

int SetStretchBltMode( HDC hDC, int iStretchMode ); //iStretchMode的選項 BLACKONWHITE;//保留黑色像素,清除白色像素,一般用于單色位圖中 COLORONCOLOR;//一般用于彩色位圖中保留位圖的顏色 WHITEONBLACK;//保留白色像素,清除黑色像素 HALFTONE;//對源圖像進行復雜處理,慢但是得到高質量的圖像

參數(shù)可以任意試驗,明顯HALFTONE參數(shù)截出的圖清晰很多。
通過這一系列移來移去的復制操作完成了屏幕截圖的工作,涉及一系列的位圖函數(shù),因此有必要認真總結一下。

/*---------------桌面截圖程序研究版-----------------*/#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) {static TCHAR szAppName[] = TEXT ("HelloWin") ;HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;if (!RegisterClass (&wndclass)){return 0 ;}hwnd = CreateWindow (szAppName, TEXT ("鼠標消息"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) {TranslateMessage (&msg) ; DispatchMessage (&msg) ; }return msg.wParam ; }LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {static HDC hdc,hdcDeskTop,hdcMem;PAINTSTRUCT ps ;static int cxScreen,cyScreen,cxClient,cyClient;HBITMAP hBitmap;switch (message){ case WM_CREATE://hwndDeskTop = GetDesktopWindow();// 獲取桌面窗口的窗口句柄 //hdcDeskTop = GetDC(hwndDeskTop);// 創(chuàng)建基本桌面窗口的設備描述表 hdcDeskTop = CreateDC("DISPLAY",NULL,NULL,NULL);//CreateDC()獲得整個屏幕的DC,一步到位hdcMem = CreateCompatibleDC(hdcDeskTop); // 創(chuàng)建兼容內存設備描述表 cxScreen = GetDeviceCaps(hdcDeskTop, HORZRES); // 獲取桌面窗口的大小cyScreen = GetDeviceCaps(hdcDeskTop, VERTRES);hBitmap = CreateCompatibleBitmap( hdcDeskTop, cxScreen, cyScreen);// 創(chuàng)建兼容位圖 SelectObject(hdcMem, hBitmap);//選入內存設備描述表//ShowWindow(hwnd, SW_HIDE);//先隱藏窗口,有這個必要嗎?此時窗口未出現(xiàn) BitBlt(hdcMem, 0, 0, cxScreen, cyScreen,hdcDeskTop, 0, 0 ,SRCCOPY); // 將桌面位圖的像素傳送到兼容位圖上 //Sleep(1000);//ShowWindow(hwnd, SW_SHOW);//顯示窗口 DeleteDC(hdcDeskTop);return 0 ;case WM_SIZE:cxClient = LOWORD(lParam);cyClient = HIWORD(lParam);return 0;case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ;// 將內存設備描述表的位圖壓縮顯示到程序窗口內//SetStretchBltMode(hdc, COLORONCOLOR);//iStretchMode參數(shù)任意選擇觀察//SetStretchBltMode(hdc, HALFTONE);StretchBlt(hdc, 0, 0, cxClient, cyClient, hdcMem, 0 ,0 , cxScreen, cyScreen, SRCCOPY); EndPaint (hwnd, &ps) ;return 0 ;case WM_DESTROY:PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam); }

?

轉載于:https://www.cnblogs.com/tinaluo/p/5406646.html

總結

以上是生活随笔為你收集整理的屏幕抓取程序 (位图DDB的例子)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲欧美国产一区二区 | 人人草超碰 | 国语对白少妇spa私密按摩 | 在线视频一区二区三区四区 | 免费成人av网址 | 午夜精华| 天天夜夜人人 | 一级肉体全黄裸片中国 | 天使色吧 | 欧美超碰在线观看 | 天堂中文在线网 | 亚洲欧洲综合av | 亚洲无线看 | 中文字幕一区二区三区在线观看 | 青青草手机在线 | 日本色影院 | 久久视频网 | 成人3d动漫一区二区三区91 | 玖玖在线免费视频 | 亚洲一区二区三区高清在线 | 日本护士体内she精2xxx | 成片免费观看视频 | 精品国产成人亚洲午夜福利 | 91激情 | 国模av在线 | av动漫免费观看 | 在线观看69 | 六月丁香色婷婷 | 天天曰天天干 | 精品国产人妻一区二区三区 | 激情丁香网 | 欧美一二三区视频 | 亚洲AV成人无码久久精品巨臀 | 91精品国产综合久久香蕉922 | 一级裸体片 | 露出调教羞耻91九色 | 亚洲成年人影院 | 国产一级做a爰片久久毛片男男 | 日本一区二区三区成人 | 青草av在线| 绿帽av| 91亚洲精品久久久蜜桃借种 | 国产精品亚洲一区二区三区 | 欧美淫 | 色播视频在线 | 国产精品国产三级国产aⅴ浪潮 | 黄网站免费在线观看 | 亚洲成人免费看 | 无码任你躁久久久久久久 | 人妻无码久久一区二区三区免费 | 日本理论片 | 综合欧美亚洲 | 欧美一级一级一级 | 男人添女人囗交视频 | 欧美性第一页 | 日本人的性生活视频 | 北岛玲一区二区 | 澳门免费av | 日本天堂网在线观看 | 亚洲熟妇丰满大屁股熟妇 | 污污网站在线观看视频 | 国产精品99精品无码视 | 丁香激情综合 | 孕妇疯狂做爰xxxⅹ 国产精品乱码久久久久久 99久久久成人国产精品 | 欧美视频一区在线观看 | 国产三级视频在线播放 | 日日操夜夜爱 | 国产成人精品在线视频 | 色婷婷在线影院 | 中文字幕一区二区人妻痴汉电车 | 免费高清视频在线观看 | www.xxx国产| 人人做| 夜夜高潮夜夜爽国产伦精品 | 一级黄色短视频 | 亚洲午夜一区二区 | 中文字幕综合网 | 人人天天夜夜 | videos麻豆 | 看黄色一级大片 | 加勒比波多野结衣 | 天堂在线播放 | 天堂网视频在线观看 | 亚洲熟妇无码一区二区三区导航 | 裸体毛片 | 国产又粗又黄又爽视频 | proumb性欧美在线观看 | 操比视频网站 | 亚洲爱| 国外亚洲成av人片在线观看 | 91爽爽| 国产一区二区在线精品 | 国产白浆在线观看 | 性生活毛片 | 国产九色91回来了 | 老司机精品视频在线 | 全部免费毛片在线播放高潮 | 五月婷婷六月丁香综合 | 永久免费AV无码网站韩国毛片 |