freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

windowsgdi雙緩沖繪圖技術(shù)研究---畢業(yè)論文-資料下載頁(yè)

2024-11-14 02:32本頁(yè)面

【導(dǎo)讀】直接的動(dòng)態(tài)圖形的顯示方式有兩個(gè)缺點(diǎn)——速度慢和屏幕閃爍。示時(shí),常常由一個(gè)場(chǎng)景變化到另一個(gè)場(chǎng)景。這時(shí)我們首先要將原先的背景擦除,然后再。[1][2]為解決此問(wèn)題,我們通常采用雙緩沖方式繪圖,它不但可以解決動(dòng)態(tài)圖。形的顯示屏幕閃爍問(wèn)題,同時(shí)還可以加快繪制圖形速度,是一舉兩得的好算法。是以VisualC++為開(kāi)發(fā)平臺(tái),設(shè)計(jì)出一套具有良好顯示效果的動(dòng)態(tài)波形顯示應(yīng)用程序,操作都使繪制所需的圖形時(shí)間變長(zhǎng),從而導(dǎo)致繪制圖形速度急劇下降。我們以VisualC++為開(kāi)發(fā)平臺(tái),Windows操作系統(tǒng)下提供豐富的設(shè)備無(wú)關(guān)。Windows圖形編程主要是利用圖形設(shè)備接口中的相關(guān)函數(shù)實(shí)現(xiàn)的。為了使用GDI和DC來(lái)繪。的“設(shè)備環(huán)境”跟顯示硬件進(jìn)行通訊。因此,各種GDI函數(shù)會(huì)自動(dòng)參考被稱(chēng)為“設(shè)備環(huán)。的是,在Windows的設(shè)備環(huán)境是GDI的關(guān)鍵元素,它代表了不同的物理設(shè)備。表2—2介紹了在基類(lèi)CDC中一些比較有用的成員函數(shù)。

  

【正文】 回如表 3— 9所示的值及其含義。 表 3— 9 區(qū)域組合的返回結(jié)果 返 回 值 含 義 COMPLEXREGION 區(qū)域覆蓋邊界 ERROR 區(qū)域無(wú)效 NULLREGION 區(qū)域?yàn)榭? SIMPLEREGION 區(qū)域沒(méi)有覆蓋邊界 CPalette類(lèi) 調(diào)色板是應(yīng)用程序和彩色輸出設(shè)備 (如顯示器 )之間的接口。這個(gè)接口允許應(yīng)用程序充分利用彩色設(shè)備的顏色特性,而對(duì)其他應(yīng)用程序的顯示效果影響不大。 Windows使 用應(yīng)用程序的邏輯調(diào)色板和系統(tǒng)調(diào)色扳來(lái)確定位用的顏色。該類(lèi)封裝了 Windows調(diào)色扳的操作的各個(gè)方面功能。 CPalette對(duì)象 調(diào)色扳的構(gòu)造函數(shù)只有一個(gè),聲明如下 Cpalette(); 該構(gòu)造函數(shù)的作用只是聲明了一個(gè)調(diào)色板對(duì)象,應(yīng)用該對(duì)象之前還需調(diào)用初始化函數(shù)對(duì) 該調(diào)色扳對(duì)象進(jìn)行初始化。 初始化 CPalette對(duì)象 成員函數(shù) c比血 P81etk可以完成對(duì)象調(diào)色板對(duì)象的初始化工作,從而創(chuàng)建一個(gè) Windows 的邏輯調(diào)色板。此函數(shù)的完整聲明如下; BOOL Cpalette(LPLOGPALETTE lpLonPalette); 其參數(shù) lpLonPalette指向一個(gè) LOGPALETTE指針,它包含了邏輯調(diào)色板的顏色信息。該結(jié)構(gòu)的完整定義為: typedef struct tagLOGPALETTE{//lapl WORD PalVersion; WORD paINumEntries。 PALETTEENTRY palPalEntry[1]。 }LOGPALETTE。 與 CRgn對(duì)象一樣,初始化后的 Cpalette對(duì)象也帝要調(diào) 用基類(lèi)的成員函數(shù) DeleteObject來(lái)刪除對(duì)象。方法為: ()。 CBitmap類(lèi) 位圖是一個(gè)由位構(gòu)成的圖象,它是由一系列數(shù)據(jù)排列而成的點(diǎn)陣結(jié)構(gòu),這些數(shù)據(jù)分別表示各點(diǎn)的顏色信息。 Windows支持兩種不同形式的位圖:設(shè)備相關(guān)位圖 DDB(Device Dependent Bitmap)和設(shè)備無(wú)關(guān)位圖 DIB(Device Independent Bitmap)。 CBitmap對(duì)象 MFC只提供了處理 DDB位圖的類(lèi) CBitmap,要顯示 DIB位圖,可以先將一個(gè) DIB位圖轉(zhuǎn)換為 DDB位圖。類(lèi) CBitmap提供了一個(gè)成員函數(shù),用于從程序的資源中裝載位圖,并可以將基于資源的 DIB位圖轉(zhuǎn)換成 GDI位圖,該函數(shù)聲明如下: BOOL LoadBitmap( LPCTSTR lpszResourceName )。 BOOL LoadBitmap( UINT nIDResource )。 其中參數(shù) lpszResourceName或 nIDResource分別為資源名稱(chēng)或資源標(biāo)識(shí),載入成功返回值為真,否則返回值為假。 CBitmap對(duì)象 位圖在顯示之前必須先裝入內(nèi)存,當(dāng)駐留在內(nèi)存的位圖數(shù)據(jù)送到視頻內(nèi)存時(shí),位圖就在顯示器上顯示。顯示一個(gè) DDB位圖步驟: (1) 調(diào)用 CDC::CreateCompatibleDC()創(chuàng)建一個(gè)兼容的內(nèi)存設(shè)備環(huán)境; (2) 調(diào)用 CBitmap::LoadBitmap()裝入位圖資源或調(diào)用CBitmap::CreateCompatibleBitmap()創(chuàng)建一個(gè)與內(nèi)存設(shè)備環(huán)境兼容的位圖; (3) 調(diào)用 CDC::SelectObject()將位圖選入設(shè)備環(huán)境; (4) 調(diào)用 CDC::BitBlt()或 CDC::StretchBlt()將位圖從內(nèi)存設(shè)備環(huán)境中復(fù)制到指定設(shè)備如顯示器。 本章主要介紹了與繪圖相關(guān)的 GDI對(duì)象類(lèi)的定義和相關(guān)類(lèi)的構(gòu)造以及相關(guān)的應(yīng)用。以及與繪圖相關(guān)的 GDI對(duì)象類(lèi)在繪圖過(guò)程的作用和它們的初始化等等。 4 Windows映射模式 Windows映射模式就是在 Windows方式下的屏幕的坐標(biāo)方式。一個(gè)實(shí)際的物理屏幕是由像素組成的,正如通常歷說(shuō)的 640480 、 800600 、 1024768 等分辨串指的就是物理屏幕的實(shí)際寬度和高度的像素?cái)?shù)目。 windows提供了幾種映射模式,或稱(chēng)為坐標(biāo)系,可以通過(guò)它們來(lái)和設(shè)備坐標(biāo)相聯(lián)系。 表 4— 1中詳細(xì)介紹了 Windows的 8種映射模式。 表 4— 1 Windows的 8種映射模式 映射模式 映射識(shí)別碼 邏輯單位 X軸正向 Y軸正向 MM_TEXT 1 Pixels 右 下 MM_LOMETRIC 2 右 上 MM_HIMETRIC 3 右 上 MM_LONGLISH 4 右 上 MM_HIENGLISH 5 右 上 MM_TWIPS 6 1/1440in 右 上 MM_ISOTROPIC 7 可變( x等于 y) 可變的 可變的 MM_ANISOTROPIC 8 可變( x不等于 y) 可變的 可變的 MM_TEXT映射模式允許應(yīng)用程序利用設(shè)備像素工作,因此用它來(lái)表示設(shè)備坐標(biāo)系是再合適不過(guò)了。屏幕 (窗口 )的原點(diǎn)約定在左上點(diǎn),而 X和 Y方向向右向下方增長(zhǎng)。 MM_LOMETRIC、 MM_HIMETRIC、 MM_LONGLISH、 MM_HIENGLISH 、 MM_TWIPS 被稱(chēng)為 “ 固定比例 ” 映射模式。所有固定比例的映射模式的 x值向右是遞 增的, y值向下是 遞減肋。 (即笛卡兒坐標(biāo)系 )它們之間的區(qū)別就在于設(shè)備坐標(biāo)到邏輯坐標(biāo)轉(zhuǎn)撓的實(shí)際比例因子 不同。值得注意的是,映射模式 MM_TWIPS常常用于打印機(jī),一個(gè) “twip” 單位相當(dāng)于1/20磅。 (磅是一種度量單位,在 Windows中 1磅等于 1/ 72英寸 )。 另外兩種映射模式 MM_ISOTROPIC 和 MM_ANISOTROPIC被稱(chēng)為 “ 可變比例 ” 映射模式。在這些模式下,我們可以改變它們的比例因子和坐標(biāo)原點(diǎn)。借助于這兩種映射模式 .當(dāng)用戶(hù)改變了窗口尺寸時(shí),繪制的圖形大小也會(huì)發(fā)生相應(yīng)的變化:同樣,如 果改變某個(gè)軸的方向,那么所繪制的圖形也會(huì)隨著該軸的變化發(fā)生改變,并且則 ]還可以定義任意的比例因子。在 MM_ISOTROPIC模式下, x方向與 Y方向上酌比例因子總是相等的 (即縱橫比為 1: 1);而在 MM_ANISOTROPIC模式下, x方向與 Y方向上的比例因子可以不相等 (即縱橫比任意 ),因此通過(guò)這一特點(diǎn),我們可以很容易的將圓拉伸成橢圓 [15]。 映射模式的設(shè)置比較容易,我們只需在 VC++調(diào)用 CDC類(lèi)中的成員函數(shù)SetMapMode 即可完成。該函數(shù)的聲明如下: virtual int SetMapMode(int nMapMode)。 其中 nMapMode就是上面所介紹的 8種映射模式。返回值是先前的映射模式。 下面將通過(guò)一個(gè)具體的實(shí)例詳細(xì)地說(shuō)明如何使用映射模式以及各種映射模式之間的相互差別 [16]。 第一步,使用 VC++創(chuàng)建一個(gè) MFC AppWizard(exe)工程,并命名為 MapMode(此工程名用戶(hù)可以任意指定 )。在向?qū)У牡谝徊街羞x擇單文檔,其余各步驟為缺省即可。 第二步, ResouceView標(biāo)簽,選擇打開(kāi) Menu項(xiàng),用鼠標(biāo)左鑲雙擊名為IDR_MAINFRAME的菜單資源。通過(guò)屬性窗口編輯該菜單資源,添加 “ 映射模式 ” 菜單項(xiàng)。再添加如表 4— 2所示的命令 ID。然后使用 C1assWizard,選擇 Message Maps選項(xiàng)卡,并保證類(lèi)名為 CMapModelView(即視類(lèi)名 ),給剛剛添加的命令 ID響應(yīng) COMMAND消息,同時(shí)添加相應(yīng)的命令消息函數(shù)。 表 4— 2 菜單命令及其命令響應(yīng)函數(shù) 命令 ID 標(biāo)題 命令消息函數(shù) ID_MAPMODE_TEXT TEXT(pixels) Om_nMapModeText() ID_MAPMODE_LOMETRIC LOMETRIC() Om_nMapModeLomeitric() ID_MAPMODE_HIMETRIC HIMETRIC() Om_nMapModeHimetric() ID_MAPMODE_LONGLISH LONGLISH() Om_nMapModeLonglish() ID_MAPMODE_HIENGLISH HIENGLISH() Om_nMapModeHienglish() ID_MAPMODE_ISOTROPIC ISOTROPIC(縱橫比為 1) Om_nMapModeIsotropic() ID_MAPMODE_ANISOTROPIC ANISOTROPIC(縱橫比可變 ) Om_nMapModeAnisotropic() 最后,實(shí)現(xiàn)命令消息函數(shù),以便確定當(dāng)前的映射模式。其形式如下: void CmapModeView::Om_nMapModeLonglish() { m_nMapMode=MM_LOENGLISH。 Invalidate(TRUE)。 } 該消息內(nèi)應(yīng)函數(shù)先將成員變量 m_nMapMode賦值為 MM_LOENGLISH,然 后再調(diào)用 Invalidate函數(shù)對(duì)視圖進(jìn)行重繪。每個(gè)菜單命令部對(duì)應(yīng)一個(gè)命令更新函數(shù),形式如下: void CmapModeView::OnUpdateMapmodeLonglish(CcmdUI*pCmdUI) { //TODO:Add your mand update UI handler code here int flag=0。 if (m_nMapMode==MM_loenglish) flag=1。 pCmdUISetCheck(flag)。 } 其中 SetCheck函數(shù)的功能是給選定的菜單命令加上復(fù)選框,這樣用戶(hù)使可以清楚當(dāng)前的 命令狀態(tài)是什么了。該函數(shù)原型如下: Virtual void SetCheck(int nCheck=1); 參數(shù) nCheck指定了菜單狀態(tài), “0” 表示不加選擇標(biāo)記, “1” 表示加選擇標(biāo)記, “2” 則 表示未確定狀態(tài)。 第三步,打開(kāi) ClassView標(biāo)簽,用鼠標(biāo)右鎮(zhèn)單擊 CMapModeView,井在彈出的快捷菜單 中選擇 Add Member Viariables? 命令添加一個(gè)類(lèi)型為 int,名為 m_nMapMode的成員變量 .該變量用來(lái)記錄當(dāng)前的映射模式。再選中 Add Memder FUNCTION?.. 命令添加成員函數(shù) DrawCoord(CDC*pDC)。來(lái)繪制坐標(biāo)軸 [17],代碼如下: //繪制坐標(biāo)軸; pDCMoveTo(0,0)。 pDCLineTo(,0)。 pDCTextOut(,10,”x”)。 pDCMoveTo(0,0)。 pDC LineTo(0,)。 pDCTextOut(10,”Y”)。 接下來(lái),通過(guò)下面的 OnDraw函數(shù)添加如下代碼,以便完成在不同的映射模式下繪制一個(gè)圓形。請(qǐng)注意該圓形在不同映射模式下的大小和坐標(biāo)軸方向的變化。 //獲得屏幕窗口矩形區(qū)域,并賦給 rc; Crect rc。 GetClientRect(amp。rc)。 //選取庫(kù)存 GDI對(duì)象; pDC_SelectStockObject(NULL_BRUSH)。 //設(shè)置映射模式; Pdc_SetMapMode(m_nMapMode)。 //設(shè)置屏幕窗口中心為原點(diǎn); Pdc_SetViewportOrg(Cpoint(,))。 //繪制坐標(biāo)軸。 DrawCoord(pDC)。 //根據(jù)不同的映射模式,進(jìn)行不同的顯示; If(m_nMapMode!=MM_ISOTROPICamp。amp。M_nMapMode!=MM_ANISOTROPIC) //” 固定比例 “ 映射模式下的圖形顯示; Pdc_Ellipse(0,0,200,200)。 Else { //” 可變比例 “ 映射模式下的圖形顯示; //通過(guò)設(shè)置窗口與視口的大小,以便確定 X方向和 Y方向上的比例因子; Pdc_setwindowext(400,400)。 Pdc_setviewportext(,)。 Pdc_ellipse(crect(200,200,200,200))。 } 最后,編譯并運(yùn)行該應(yīng)用程序。運(yùn)行結(jié)果如圖 4— 1a和圖 4— 1b所示。 圖 4— 1a 映射模式為 MM_ANISOTROPIC 圖 4— 1a 映射模式為 MM_ISOTROPIC 本章主要介紹 Windows映射模式的模式基本概念和映射模式基本的應(yīng)用。通過(guò)本小結(jié)的了解 Windows映射模式和映射模 式的區(qū)別,以及各自的實(shí)現(xiàn)的方法等等。 5課題設(shè)計(jì) Windows GDI雙緩沖繪圖原理 本課題研究的內(nèi)容是消除屏幕顯示動(dòng)態(tài)圖形的閃爍.使得動(dòng)態(tài)圖形顯示連續(xù)且速度較快。解決這一問(wèn)題我們雙緩存繪圖技術(shù)。我們就必須不擦除背景并減少圖形繪制到屏幕上的時(shí)間。在 VC++中.我們可以采用 GDI位圖和內(nèi)存設(shè)備環(huán)境的方法來(lái)消除屏幕顯示動(dòng)態(tài)圖形的閃爍問(wèn)題,并提高顯示的速度。這種方法的基本思想是:首先利用繪圖函數(shù)在內(nèi)存設(shè)備環(huán)境以及與顯示兼容的位圖中開(kāi)始繪制等整個(gè)所需要顯示的圖形繪制完后,
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1