版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 屏幕截圖軟件設(shè)計</b></p><p> 摘要: 本文闡述 VC++實(shí)現(xiàn)屏幕截圖功能的原理和具體設(shè)計步驟,所實(shí)現(xiàn)的這個抓圖軟件可以截取整個屏幕,截取指定的窗口,并將截取到的圖像以bmp文件形式保存到指定的路徑下。技術(shù)重點(diǎn)在鼠標(biāo)在屏幕上的準(zhǔn)確定位;如何獲取抓圖的窗口句柄;如何對抓到的圖片進(jìn)行保存的問題。技術(shù)難點(diǎn)在如何將所抓取的屏幕窗口保存為磁盤BMP文件形式。
2、</p><p> 關(guān)鍵詞:屏幕截圖;BMP位圖;設(shè)備環(huán)境(DC)</p><p><b> 1 引言</b></p><p> 在我們的日常上網(wǎng)活動當(dāng)中比如看電影、玩游戲、做圖等等會對一些畫面特別喜歡!但是卻沒有辦法將這些畫面以圖片形式保存下來,真是猶如“水中月,鏡中花”看得到卻得不到。由于QQ的出現(xiàn),曾改變了幾億人的交流生活方式,它的
3、里面嵌入的任意截圖功能,更是為人們的生活增添了無限的歡愉和快樂,通過截圖自己可以將最喜歡的游戲畫面,最喜歡的電影畫面,以圖片形式保存,可以及時的發(fā)給好友共享,給我們帶來了意想不到的幫助和驚喜。</p><p> 另外系統(tǒng)的功能強(qiáng)大的截圖軟件在社會建設(shè)的各個領(lǐng)域都到了施展空間,為人們的工作生活創(chuàng)造了極大的方便,解決了許多棘手難題??梢哉f呀抓圖軟件有很廣闊的應(yīng)用前景,雖然它不算是很龐大的系統(tǒng)軟件,但是其它的大型的主
4、流系統(tǒng)軟件能夠嵌入抓圖的功能,必將受到極大的歡迎和青睞。</p><p> 所以在此次軟件課程設(shè)計當(dāng)中,我選擇了用VC制作屏幕截圖的軟件,實(shí)現(xiàn)截取指定窗口,整個屏幕的功能,并且將截取的圖形以BMP文件形式存放在指定路徑的磁盤當(dāng)中。本文將系統(tǒng)介紹截圖軟件的設(shè)計原理,設(shè)計步驟,設(shè)計方法,和運(yùn)用的重點(diǎn)技術(shù)。</p><p> 2 實(shí)現(xiàn)基本原理和運(yùn)用相關(guān)技術(shù)</p><p&
5、gt; 抓圖軟件基本原理就是把屏幕上所抓取的圖像復(fù)制到內(nèi)存中,并最后將內(nèi)存中的圖像內(nèi)容以位圖文件形式保存到磁盤當(dāng)中。在這此軟件設(shè)計當(dāng)中,如果用戶將鼠標(biāo)左鍵按住不放,則開始抓取圖片,此時隱藏程序窗口,以免影響在抓取時的“視野”,接著裝入“魔法棒”鼠標(biāo),開始追蹤鼠標(biāo)的移動,然后獲得鼠標(biāo)所在處的窗口句柄,取得屏幕的設(shè)備環(huán)境句柄,以便在屏幕的任何位置繪圖。接下來建立一紅色的畫筆,得到鼠標(biāo)所在處的窗口的區(qū)域,在鼠標(biāo)所在處的窗口四周畫一紅色的矩形
6、,做為選定時的提醒。當(dāng)鼠標(biāo)左鍵釋放的時候得到鼠標(biāo)所在處的窗口的區(qū)域?qū)?、高,然后建立一個屏幕設(shè)備環(huán)境句柄和與屏幕設(shè)備環(huán)境句柄兼容、與鼠標(biāo)所在處的窗口的區(qū)域等大的位圖,把新位圖選到內(nèi)存設(shè)備描述表中,最后把屏幕設(shè)備描述表拷貝到內(nèi)存設(shè)備描述表中,終止鼠標(biāo)捕獲,恢復(fù)窗口顯示模式。那么最后要作的工作就是寫一個位圖保存函數(shù)將內(nèi)存當(dāng)中的窗口圖片信息以位圖形式保存到指定磁盤當(dāng)中。在整個程序當(dāng)中要用到大量的函數(shù):比如申請內(nèi)存空間用于存放位圖文件 Glob
7、alAlloc(GHND,F(xiàn)ileLength); 位圖文件讀入所申請內(nèi)存空間中LoadFileToMemory( mpBitsS</p><p> 屏幕抓圖程序的關(guān)鍵有兩點(diǎn):一是應(yīng)該知道鼠標(biāo)在屏幕上有準(zhǔn)確位置;二是應(yīng)該知道欲抓圖的窗口句柄;三是如何對抓到的圖片進(jìn)行保存的問題。對于問題一,很簡單,利用SetCapture函數(shù)便能夠追蹤鼠標(biāo)的移動(包括在屏幕抓圖程序窗口之外的窗口)。對于問題二,這時會用到一個平時
8、我們不常用的函數(shù):WindowFromPoint,其函數(shù)用法如下:HWND WindowFromPoint{ POINT Point; //坐標(biāo)};這個函數(shù)能夠找出鼠標(biāo)當(dāng)前位置所對應(yīng)的窗口句柄。具體用法可以參見MSDN,這里不做詳細(xì)敘述。在選擇抓圖窗口時,鼠標(biāo)的在位置的窗口都會出現(xiàn)加粗的有色邊框,以提醒目前所選擇的窗口,這個功能實(shí)現(xiàn)起來有些復(fù)雜,它的代碼如下:</p><p> POINT pt[5];
9、</p><p> pt[0] = CPoint(rectCapture.left, rectCapture.top); </p><p> pt[1] = CPoint(rectCapture.right,rectCapture.top); </p><p> pt[2] = CPoint(rectCapture.right,rectCapture.bott
10、om); </p><p> pt[3] = CPoint(rectCapture.left, rectCapture.bottom); </p><p> pt[4] = CPoint(rectCapture.left, rectCapture.top);</p><p> 在GDI中,最常見的一個概念就設(shè)備環(huán)境(DC),每一個窗口都相應(yīng)的具有自己的DC。如
11、果能夠調(diào)用到窗口的DC,那么,我們便能夠在窗口上的任何位置繪圖。然而,在屏幕抓圖程序中,由于用戶所選擇的窗口是不固定的,所以,要想得到鼠標(biāo)所在處的窗口的DC,不是很容易。但是能夠隨心所欲地在屏幕上進(jìn)行繪圖卻又不僅限于特定的窗口,GetDC能夠做到這點(diǎn)! GetDC的函數(shù)申明:HDC GetDC( HWND hWnd),hWnd是DC對應(yīng)的窗口句柄,當(dāng)hWnd為空時,該函數(shù)返回的是整個屏幕的設(shè)備環(huán)境句柄!這就意味著我們可以在屏幕上進(jìn)行任意
12、繪圖。在鼠標(biāo)所在處的窗口進(jìn)行繪圖時,繪圖本身的目的只是為了提醒用戶目前所選擇的窗口,所以,在進(jìn)行繪圖時,必須得保證不會破壞窗口原有的畫面。這點(diǎn)很好辦,將窗口的DC繪圖模式設(shè)為R2_NOTXORPEN(將畫筆顏色與屏幕顏色進(jìn)行異或后,再將屏幕顏取反),這樣,在同一個地方進(jìn)行兩次繪圖后(對同一像素進(jìn)行兩次異或運(yùn)算,像素值并不會發(fā)生變化),窗口的畫面并不會發(fā)生任何變化。以上就是此次截圖軟件設(shè)計當(dāng)中運(yùn)用的相關(guān)技術(shù)和設(shè)計實(shí)現(xiàn)原理。</p&g
13、t;<p><b> 3 軟件詳細(xì)設(shè)計</b></p><p> 3.1建立基于對話框的工程文件</p><p> 啟動Visual C++,生成一個基于對話框的工程,工程名為“Capture”. 然后準(zhǔn)備好一個外形為細(xì)長矩形的光標(biāo)文件(*.cur),將之引入資源管理器(IDC_CAMERA)。接著在CCaptureDlg類中加入兩個全局變量:HW
14、ND hwndCapture; CRect rectCapture; UINT nFlags;</p><p> CPoint point;LPCTSTR lpFileName;HBITMAP hBitmap;</p><p> 3.2添加消息響應(yīng)函數(shù)</p><p> 然后通過類向?qū)Ъ尤雽M_MOUSEMOVE及WM_LBUTTONUP事件的響應(yīng)函數(shù),添加
15、WM_MOUSEMOVE事件的響應(yīng)函數(shù)代碼該函數(shù)主要實(shí)現(xiàn)的功能:鼠標(biāo)左鍵按住不放,則開始抓取圖片,此時隱藏程序窗口,以免影響在抓取時的“視野”,接著裝入“魔法棒”鼠標(biāo),開始追蹤鼠標(biāo)的移動,然后獲得鼠標(biāo)所在處的窗口句柄,取得屏幕的設(shè)備環(huán)境句柄,以便在屏幕的任何位置繪圖。接下來建立一紅色的畫筆,得到鼠標(biāo)所在處的窗口的區(qū)域,在鼠標(biāo)所在處的窗口四周畫一紅色的矩形,做為選定時的提醒。</p><p> void CCap
16、tureDlg::OnMouseMove(UINT nFlags, CPoint point) </p><p><b> {</b></p><p> //如果用戶將鼠標(biāo)左鍵按住不放,則開始抓取圖片 </p><p> if(nFlags==MK_LBUTTON) </p><p><b> { &l
17、t;/b></p><p> //隱藏程序窗口,以免影響在抓取時的“視野” </p><p> ShowWindow(SW_HIDE); </p><p> //裝入“魔法棒”鼠標(biāo),開始追蹤鼠標(biāo)的移動 </p><p> HCURSOR cur=LoadCursor(AfxGetInstanceHandle(),MAKEINTR
18、ESOURCE(IDC_CAMERA )); </p><p> SetCursor(cur); </p><p> SetCapture(); </p><p> //獲得鼠標(biāo)所在處的窗口句柄 </p><p> ClientToScreen(&point); </p><p> hwndCaptu
19、re=(HWND)::WindowFromPoint(point); </p><p> //取得屏幕的設(shè)備環(huán)境句柄,以便在屏幕的任何位置繪圖 </p><p> HDC hDC=::GetDC(NULL); </p><p> //建立一紅色的畫筆 </p><p> HPEN hPen =CreatePen(PS_INSIDEFR
20、AME,6, RGB(255,0,0)); </p><p> //將繪圖模式設(shè)為R2_NOTXORPEN,在繪圖時可以不破壞原有的背景 </p><p> int nMode =SetROP2(hDC, R2_NOTXORPEN); </p><p> HPEN hpenOld= (HPEN)SelectObject(hDC, hPen); </p&g
21、t;<p> //得到鼠標(biāo)所在處的窗口的區(qū)域 </p><p> ::GetWindowRect(hwndCapture,&rectCapture); </p><p> //在鼠標(biāo)所在處的窗口四周畫一紅色的矩形,做為選定時的提醒 </p><p> POINT pt[5]; </p><p> pt[0] =
22、 CPoint(rectCapture.left, rectCapture.top); </p><p> pt[1] = CPoint(rectCapture.right,rectCapture.top); </p><p> pt[2] = CPoint(rectCapture.right,rectCapture.bottom); </p><p> pt
23、[3] = CPoint(rectCapture.left, rectCapture.bottom); </p><p> pt[4] = CPoint(rectCapture.left, rectCapture.top); </p><p> ::Polyline(hDC,pt,5); </p><p> //延時后再重繪紅色的矩形,這樣就不會破壞原有內(nèi)容
24、 </p><p> Sleep(100); </p><p> ::Polyline(hDC,pt,5); </p><p> ::SelectObject(hDC,hpenOld); </p><p> ::ReleaseDC(NULL,hDC); </p><p><b> } </b&
25、gt;</p><p> CDialog::OnMouseMove(nFlags, point);</p><p><b> }</b></p><p> 添加WM_LBUTTONUP事件的響應(yīng)函數(shù)代碼:該函數(shù)主要實(shí)現(xiàn)當(dāng)鼠標(biāo)左鍵釋放的時候得到鼠標(biāo)所在處的窗口的區(qū)域?qū)挕⒏?,然后建立一個屏幕設(shè)備環(huán)境句柄和與屏幕設(shè)備環(huán)境句柄兼容、與鼠標(biāo)所在處的
26、窗口的區(qū)域等大的位圖,把新位圖選到內(nèi)存設(shè)備描述表中,最后把屏幕設(shè)備描述表拷貝到內(nèi)存設(shè)備描述表中,終止鼠標(biāo)捕獲,恢復(fù)窗口顯示模式。</p><p> void CCaptureDlg::OnLButtonUp(UINT nFlags, CPoint point) </p><p> {//得到鼠標(biāo)所在處的窗口的區(qū)域?qū)?、?</p><p> int nWidt
27、h=rectCapture.Width(); </p><p> int nHeight=rectCapture.Height(); </p><p> HDC hdcScreen, hMemDC; </p><p> HBITMAP hOldBitmap; </p><p> //建立一個屏幕設(shè)備環(huán)境句柄 </p>
28、<p> hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); </p><p> hMemDC = CreateCompatibleDC(hdcScreen); </p><p> //建立一個與屏幕設(shè)備環(huán)境句柄兼容、與鼠標(biāo)所在處的窗口的區(qū)域等大的位圖 </p><p> hB
29、itmap = CreateCompatibleBitmap(hdcScreen, nWidth, nHeight); </p><p> // 把新位圖選到內(nèi)存設(shè)備描述表中 </p><p> hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap); </p><p> // 把屏幕設(shè)備描述表拷貝到內(nèi)存設(shè)備描述表
30、中 </p><p> BitBlt(hMemDC,0,0,nWidth,nHeight,hdcScreen,rectCapture.left,rectCapture.top,SRCCOPY); </p><p> //取回鼠標(biāo)所在處的窗口屏幕位圖的句柄 </p><p> hBitmap =(HBITMAP)SelectObject(hMemDC, hOld
31、Bitmap); </p><p> DeleteDC(hdcScreen); </p><p> DeleteDC(hMemDC); </p><p> MessageBox("屏幕內(nèi)容已經(jīng)剪切獲得,請單擊對話框菜單按紐保存為BMP文件!"); </p><p><b> //終止鼠標(biāo)捕獲 </b
32、></p><p> ReleaseCapture(); </p><p> //恢復(fù)窗口顯示模式 </p><p> ShowWindow(SW_NORMAL); </p><p> CDialog::OnLButtonUp(nFlags, point);</p><p><b> }<
33、;/b></p><p> 3.3將抓取的窗口圖片保存為位圖文件存取</p><p> 設(shè)計保存函數(shù)SaveBitmapToFile(HBITMAP hBitmap, LPCTSTR lpFileName),并且在前面對話框類里面進(jìn)行函數(shù)聲明。此函數(shù)是整個軟件設(shè)計當(dāng)中的技術(shù)難點(diǎn),要特別對BMP位圖文件非常熟悉,BMP文件由文件頭、位圖信息頭、顏色信息和圖形數(shù)據(jù)四部分組成。BMP
34、文件頭數(shù)據(jù)結(jié)構(gòu)含有BMP文件的類型、文件大小和位圖起始位置等信息。位圖文件的類型,必須為BM位圖文件的大小,以字節(jié)為單位,位圖文件保留字,必須為0位圖數(shù)據(jù)的起始位置,以相對于位圖文件頭的偏移量表示,以字節(jié)為單位。BMP位圖信息頭數(shù)據(jù)用于說明位圖的尺寸等信息。在typedef struct tagBITMAPINFOHEADER結(jié)構(gòu)當(dāng)中DWORD biSize表示本結(jié)構(gòu)所占用字節(jié)數(shù);LONGbiWidth表示位圖的寬度;以像素為單位LON
35、GbiHeight表示位圖的高度,以像素為單位WORD biPlanes表示目標(biāo)設(shè)備的級別,必須為1;WORD biBitCount表示每個像素所需的位數(shù),必須是1(雙色),4(16色),8(256色)或24(真彩色)之一;DWORD biCompression; </p><p> {BITMAPINFOHEADER bmiHeader; // 位圖信息頭RGBQUAD bmiColors[1]; //
36、顏色表} BITMAPINFO;位圖數(shù)據(jù)記錄了位圖的每一個像素值,記錄順序是在掃描行內(nèi)是從左到右,掃描行之間是從下到上。位圖的一個像素值所占的字節(jié)數(shù): 當(dāng)biBitCount=1時,8個像素占1個字節(jié);當(dāng)biBitCount=4時,2個像素占1個字節(jié);當(dāng)biBitCount=8時,1個像素占1個字節(jié);當(dāng)biBitCount=24時,1個像素占3個字節(jié);Windows規(guī)定一個掃描行所占的字節(jié)數(shù)必須是 4的倍數(shù)(即以long為單位),不
37、足的以0填充, 一個掃描行所占的字節(jié)數(shù)計算方法: DataSizePerLine= (biWidth* biBitCount+31)/8表示一個掃描行所占的字節(jié)數(shù); DataSizePerLine= DataSizePerLine/4*4表示字節(jié)數(shù)必須是4的倍數(shù) ,位圖數(shù)據(jù)的大小(不壓縮情況下):DataSize= DataSizePerLine* biHeight; 在SaveBitmapToFile()當(dāng)中首先<
38、/p><p> 3.4軟件界面設(shè)計和其它相關(guān)功能設(shè)計</p><p> 由于本軟件是基于對話框的工程,其界面相對比較單一簡單,那么為了使得界面比較漂亮美觀,我特別進(jìn)行了對話框的漸變色設(shè)計,使界面有夢幻般的感覺。對話框的漸變色效果是在OnPaint()函數(shù)中實(shí)現(xiàn)的 ,具體實(shí)現(xiàn)細(xì)節(jié)在這里不多做描述了。在軟件設(shè)計的最后收尾階段,實(shí)現(xiàn)文件的退出菜單功能設(shè)計。圖1是該抓圖軟件的運(yùn)行界面圖形。<
39、/p><p><b> ?。▓D1)</b></p><p> 3.5軟件運(yùn)行功能測試圖</p><p> 啟動工程執(zhí)行程序,出現(xiàn)圖1程序界面時,用鼠標(biāo)按下左鍵,程序界面便隱藏,于是拖動鼠標(biāo)開始屏幕抓圖。當(dāng)鼠標(biāo)左鍵釋放后,程序會彈出一個MessageBox對話框來提醒您已經(jīng)抓取了指定窗口的圖片請單擊對話框菜單按鈕保存為指定磁盤路徑的BMP文件,接
40、下來程序窗口出現(xiàn),最后點(diǎn)擊菜單按鈕保存抓取的窗口圖片。</p><p> 圖2就是抓取的全屏位圖。 </p><p><b> ?。▓D2)</b></p><p> 此抓圖軟件不僅僅可以抓取全屏圖案,還可以抓取任意指定窗口的圖形。圖3是 抓取指定小窗口的BMP圖片。</p&g
41、t;<p><b> (圖3)</b></p><p> 當(dāng)抓圖結(jié)束后,可以單擊界面上的菜單退出按鈕安全退出,此時程序又會彈出一個MessageBox對話框提醒您是否確定要退出程序。通過大量的調(diào)試和運(yùn)行,該抓圖軟件運(yùn)行穩(wěn)定,抓取保存速度比較快,整體性能比較理想。完成了任意指定窗口的界面截取功能及保存功能。</p><p> 4 存在問題和改進(jìn)意見&
42、lt;/p><p> 在此次屏幕截圖軟件設(shè)計當(dāng)中主要面對三個問題,一是如何知道鼠標(biāo)在屏幕上的準(zhǔn)確位置;二是如何知道欲抓圖的窗口句柄;三是如何對抓到的圖片進(jìn)行保存的問題。對于問題一,很簡單,利用SetCapture函數(shù)便能夠追蹤鼠標(biāo)的移動,包括在屏幕抓圖程序窗口之外的窗口。應(yīng)該注意的是,SetCapture的具體功能并不像MSDN中所說的那樣:調(diào)用SetCapture一次直到使用ReleaseCapture終止鼠標(biāo)捕
43、獲前都會起到對鼠標(biāo)的捕獲作用,實(shí)際上,在使用過程中,就會發(fā)現(xiàn),在進(jìn)行了一次鼠標(biāo)捕獲之后,SetCapture便失去了作用,這可能是SetCapture函數(shù)的一個Bug。所以,在編程時,要不斷地調(diào)用SetCapture函數(shù),以保證SetCapture能夠?qū)κ髽?biāo)進(jìn)行正確無誤的捕獲。對于問題二,這時會用到一個平時我們不常用的函數(shù):WindowFromPoint,這個函數(shù)能夠找出鼠標(biāo)當(dāng)前位置所對應(yīng)的窗口句柄。</p><p&
44、gt; 問題最多當(dāng)要屬問題三:如何對抓到的圖片進(jìn)行保存且保存為指定位置的bmp文件,這個是整個程序設(shè)計當(dāng)中的難點(diǎn)也是最麻煩的出了很多棘手的問題,由于需要設(shè)計一個這樣的保存函數(shù),限于自身水平就參考了網(wǎng)上同仁編寫的這種功能的函數(shù),于是拿到自己的程序中調(diào)用此函數(shù)便陷入了尷尬的境地,首先是出現(xiàn)了二三十處語法錯誤經(jīng)過耐心修改全部搞定,但是執(zhí)行程序,單擊保存按鈕卻無法進(jìn)行保存,一運(yùn)行會發(fā)出錯誤報告然后自動退出,經(jīng)過確定是程序邏輯錯誤,后經(jīng)過調(diào)試是
45、應(yīng)為在寫這個函數(shù)的時候,一個參數(shù)有問題,是因?yàn)樵搮?shù)是在前面的一個函數(shù)中定義過且為私有變量,后面的函數(shù)需要調(diào)用這個參數(shù),來獲取屏幕位圖窗口句柄,那么這個參數(shù)就需要設(shè)置為全局變量,在這里我就犯了這個低級錯誤。接著執(zhí)行程序抓圖保存,但是令人驚訝的是機(jī)子接近崩潰的邊緣,運(yùn)行比“蝸?!边€慢,等大約6-7分鐘后,一切才恢復(fù)正常,最后到保存的指定文件中去查看所保存的抓取圖片,讓人吃驚的是保存的圖片大小為655M,怪不得執(zhí)行程序后會那么慢,經(jīng)過分析問
46、題出在,設(shè)置保存為BMP文件得時候,抓取窗口得長寬大小在函數(shù)SaveBitmapToFile()中并沒有獲得,那么程序運(yùn)行得時候就</p><p> 為所抓取的圖片數(shù)據(jù)沒有獲得,用DEBUG設(shè)置斷點(diǎn)調(diào)試明顯顯示GetDIBits()的數(shù)據(jù)值為0,但是始終搞不清楚為什么所獲得的位圖數(shù)據(jù)值是零,龍滿生老師細(xì)心的幫我分析,最后才確定出罪魁禍?zhǔn)资荄eleteDC(hDC);該函數(shù)用錯了位置,它在GetDIBits()函
47、數(shù)調(diào)用之前便調(diào)用了那么當(dāng)然獲取的位圖數(shù)據(jù)為零了,于是調(diào)整DeleteDC(hDC)為在GetDIBits()函數(shù)調(diào)用之后調(diào)用,終于解決了這個問題。那么到最后該軟件就算大功告成了。</p><p> 該軟件特別要改經(jīng)的地方那就是能夠像QQ抓圖那樣任意拖動鼠標(biāo),截取任意大小的圖片,并且所見即所抓,不管它是什么東東,游戲畫面也好,電影畫面也好,F(xiàn)LANSH,靜態(tài)圖片等等,像怎么抓就怎么抓。但是限于自身能力有限還有時間
48、的關(guān)系,這些更棒功能等以后再實(shí)現(xiàn)吧</p><p><b> 5 結(jié)束語</b></p><p> 在此論文當(dāng)中主要介紹 VC++實(shí)現(xiàn)屏幕截圖功能的實(shí)現(xiàn)基本原理和運(yùn)用的相關(guān)技術(shù)詳細(xì)介紹了軟件的具體設(shè)計步驟,所實(shí)現(xiàn)的這個抓圖軟件可以截取整個屏幕,截取指定的窗口,并將截取到的圖像以bmp文件形式保存到指定的路徑下。技術(shù)重點(diǎn)在鼠標(biāo)在屏幕上的準(zhǔn)確定位;如何獲取抓圖的窗口句
49、柄;如何對抓到的圖片進(jìn)行保存的問題。技術(shù)難點(diǎn)在如何將所抓取的屏幕窗口保存為磁盤BMP文件形式。</p><p> 在整個設(shè)計當(dāng)中要運(yùn)用大量的圖形操作函數(shù),特別是在設(shè)計保存功能的時候,要對位圖文件結(jié)構(gòu)有相當(dāng)深刻的了解,通過此次設(shè)計自己掌握了很多技術(shù)如:追蹤鼠標(biāo)的移動,如何獲得鼠標(biāo)所在處的窗口句柄,如何取得屏幕的設(shè)備環(huán)境句柄得到鼠標(biāo)所在處的窗口的區(qū)域?qū)?、高,如何建立一個屏幕設(shè)備環(huán)境句柄和與屏幕設(shè)備環(huán)境句柄兼容、與鼠
50、標(biāo)所在處的窗口的區(qū)域等大的位圖,如何把新位圖選到內(nèi)存設(shè)備描述表中,如何把屏幕設(shè)備描述表拷貝到內(nèi)存設(shè)備描述表中等等。</p><p> 最后要特別感謝龍滿生老師,在這兩個禮拜的軟件設(shè)計當(dāng)中,龍滿生老師作為我的導(dǎo)師給予了我巨大的幫助和指導(dǎo),自己在這個過程當(dāng)中學(xué)會了很多很多東西,比如如何分析程序出錯的原因,如何解決問題的方法,特別是我感受到了要想作為一名好的編程人員所應(yīng)具備的素質(zhì),通過老師的指導(dǎo)我還領(lǐng)會了DEBUG斷
51、點(diǎn)調(diào)試的妙用,從這里我更深入的理解了程序運(yùn)行的機(jī)制和參數(shù)數(shù)據(jù)間的傳遞以及函數(shù)的相互調(diào)用。同時增強(qiáng)了自己的編程能力和一些作為編程人員所因具有的耐性和仔細(xì),體會到了溝通協(xié)作的重要性,總之在這兩個禮拜的軟件課程設(shè)計當(dāng)中自己學(xué)到了很多很多。</p><p><b> 參考文獻(xiàn)</b></p><p> 1.何東健. 數(shù)字圖像處理. 西安:西安電子科技大學(xué)出版社,2003&
52、lt;/p><p> 2.楊永國.Visual C++ 6.0實(shí)用教程. 北京:清華大學(xué)出版社,2004</p><p> 3.張力. Visual C++高級編程. 北京:人民郵電出版社,2002</p><p> 4.《電腦編程技巧與維護(hù)》雜志社,Visual C/C++編程精選集錦(數(shù)據(jù)庫和圖形圖像分冊).北京:科學(xué)出版社,2003</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件課程設(shè)計報告
- protel軟件課程設(shè)計
- 軟件課程設(shè)計報告
- 軟件測試課程設(shè)計
- 軟件測試課程設(shè)計
- 軟件工程課程設(shè)計
- 軟件工程課程設(shè)計
- 軟件工程課程設(shè)計
- catia軟件課后課程設(shè)計
- 軟件工程課程設(shè)計
- 《軟件工程》課程設(shè)計
- 軟件工程課程設(shè)計
- 軟件課程設(shè)計報告(opc)
- 軟件測試課程設(shè)計報告
- 軟件設(shè)計模式課程設(shè)計
- 軟件工程課程設(shè)計--網(wǎng)站設(shè)計
- 【課程設(shè)計】軟件技術(shù)基礎(chǔ)
- mcgs工控組態(tài)軟件課程設(shè)計
- 軟件工程課程設(shè)計報告
- 軟件工程課程設(shè)計-電梯
評論
0/150
提交評論