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

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

主站蜘蛛池模板: 国产伦精品一区二区三区视频网站 | 色婷婷九月 | 中文字幕一区二区三区四区 | 亚洲欧美大片 | 国产一区视频免费观看 | 国产高潮流白浆喷水视频 | av中文在线天堂 | 黄色成年人视频 | 高潮一区| 成人欧美一区二区 | 国产白浆视频 | 午夜性片 | 亚洲AV无码成人精品区麻豆 | 亚洲一区免费看 | 色婷婷av一区二区三区之e本道 | 欧美在线va | 谁有毛片网址 | 青草青青视频 | 欧美精彩视频 | 强行糟蹋人妻hd中文字幕 | 免费欧美 | 欧美一级黄 | zzjj国产精品一区二区 | 成人午夜免费福利视频 | 九九九国产 | 日韩精品免费一区二区夜夜嗨 | 黄瓜视频在线免费看 | 亚洲区视频在线观看 | free性欧美69巨大 | 日韩私人影院 | 黄色大片网站在线观看 | 性高潮久久久久久久久 | 国产精品久久精品三级 | 九热精品 | 一区二区三区波多野结衣 | 2级黄色片| 亚洲精品永久免费 | 国产精品18久久久久久久久 | 亚洲无线观看 | 亚洲gay视频| 以女性视角写的高h爽文 | 高清av不卡 | 男人的天堂av片 | 欧美激情免费看 | 91视频成人免费 | 国产91在线视频观看 | 韩国19主播内部福利vip | 久久久久久久性 | 国产老头老太作爱视频 | 久久青青草原 | 黄色小视频在线 | 伊人网久久久 | 国产一级做a爱片久久毛片a | 亚洲天堂777| 69xx视频在线观看 | 免费在线观看黄 | 中文字幕人妻熟女在线 | 91微拍| 欧美jizz19性欧美 | 蜜桃av免费在线观看 | av网址免费在线观看 | av最新网址 | 日本在线播放一区 | 成人av第一页 | 日本aaa级片 | 亚洲一区二区三区在线免费观看 | 亚洲2022国产成人精品无码区 | 日本一区二区不卡在线 | 亚洲av永久无码精品一百度影院 | a级大片在线观看 | 久久影业 | 午夜伦视频 | 国产精品污污 | 男女插插插视频 | 玩弄人妻少妇500系列视频 | 久福利 | 青青免费在线视频 | 国产初高中真实精品视频 | 91美女福利视频 | 免费成人毛片 | 亚洲一区二区三区四区五区六区 | 在线观看免费观看在线 | 中文字幕精品无 | 精品亚洲一区二区三区 | 亚洲国产精品一区二区久久hs | 夜夜骚av一区二区三区 | 日韩女同一区二区三区 | 91丨九色丨国产 | 真实偷拍激情啪啪对白 | 一区二区国产精品精华液 | 亚洲一区 欧美 | 中文字幕国产一区 | 日韩永久免费视频 | 国产精品情侣呻吟对白视频 | 亚洲AV无码一区二区三区少妇 | 色五丁香| 美女色网站| 国产农村妇女精品一区 | 久久久国产一区 |