




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第6章 圖形程序的編程基礎(chǔ)概論ngdi (graphics device interface)qwindows系統(tǒng)的一種軟件子系統(tǒng),它按照gdi函數(shù)來工作,負責(zé)在屏幕顯示器和打印機上顯示圖形。q32位gdi就是gdi32.dll動態(tài)鏈結(jié)庫,可以把它理解成gdi函數(shù)的解釋器并按照解釋調(diào)用相應(yīng)的設(shè)備驅(qū)動程序。q不同的設(shè)備有不同的設(shè)備驅(qū)動程序,這就實現(xiàn)了與設(shè)備無關(guān)的圖形輸出,gdi在應(yīng)用程序和不同輸出設(shè)備之間起著隔離作用,應(yīng)用程序只要考慮gdi函數(shù)不必考慮設(shè)備,是實現(xiàn)設(shè)備無關(guān)性輸出的關(guān)鍵措施。gdi函數(shù)及其分類n取得和釋放設(shè)備描述表代號的函數(shù) q如前所述:beginpaint、getdc、getwi
2、ndowdcn取得字體尺寸信息的函數(shù):gettextmetrics 。n 繪圖函數(shù):lineto(畫直線)等n 設(shè)定和取得設(shè)備描述表中有關(guān)屬性的函數(shù) qsettextcolor、settextalign等n使用gdi對象的函數(shù) q邏輯筆、畫刷、字體等對象,使用時加載到設(shè)備描述表中g(shù)di繪制的基本圖形n直線和曲線 q支持直線、矩形、橢圓、圓弧n 填入?yún)^(qū)域 q對封閉區(qū)域可以使用當(dāng)前gdi畫刷對象進行填圖n點陣圖 q常用于圖像的顯示:bmp文件n文本圖形程序設(shè)計的其他問題n 映射模式及其變換n metafile(元文件)qmetafile以圖形繪制命令描述圖像,因此可以對圖像進行縮放而不會失真n 繪
3、圖區(qū)域 n路徑 n裁剪 n 調(diào)色盤 n 打印 設(shè)備描述表n取得設(shè)備描述表代號的方法qgetwindowdc:獲取整個窗口的設(shè)備描述表代號,在wm_ncpaint消息分支中響應(yīng)。qcreatedc:取得整個屏幕的設(shè)備描述表代號,常用于打印機。qcreateic:獲取設(shè)備描述表的一些信息,但不能用此繪圖。n取得設(shè)備描述表中信息的方法qgetdevicecaps,確定設(shè)備處理不同類型圖形的能力。q程序保存設(shè)備描述表n原因q希望對改變后的設(shè)備描述表屬性在下次使用仍然有效。n解決q在注冊窗口時加入cs_owndc屬性,只需初始化一次屬性,一般在wm_create消息響應(yīng)中設(shè)置。qcs_owndc只影響g
4、etdc和beginpaint獲得的設(shè)備描述表qsavedc,restoredc設(shè)備描述表的構(gòu)成n由19項構(gòu)成n如果不對其屬性改變,使用的是默認值,如上一章例子中使用的textout函數(shù)n典型:qtex tcolorqfontqcurrent position解析度n概念q每度量單位內(nèi)的像素數(shù)目,打印機經(jīng)常用“每英寸的點數(shù)(dpi)”表示,顯示器以水平和垂直的總像素來表示的。q如果設(shè)備的水平解析度與垂直解析度相等,稱為正方形像素。q可以使用sm_cxscreen和sm_cyscreen參數(shù)得到像素尺寸色彩n色彩數(shù)q每個像素的色彩數(shù)由表達顏色的二進制位數(shù)決定,最簡單的黑白顯示器由1位表達q在大多
5、數(shù)gdi函數(shù)調(diào)用中,使用colorref值,該值是一個32位的無正負號長整數(shù),但只用了24位(3個8位,r、g、b3基色各占8位)q通常利用宏rgb構(gòu)建畫線函數(shù)與畫筆n處理像素的函數(shù) qwindows gdi盡管包含了setpixel和getpixel函數(shù),但很少使用它們。qsetpixel (hdc, x, y, crcolor) ;/在(x,y)坐標(biāo)處設(shè)置像素顏色crcolorqgetpixel函數(shù)返回指定座標(biāo)處的像素顏色:qcrcolor = getpixel (hdc, x, y) ;畫線函數(shù)與畫筆n畫線函數(shù)q畫線函數(shù)的作用是畫出圖形的輪廓線。windows支持畫直線、橢圓線等 qli
6、neto 畫直線。qpolyline和polylineto 畫一系列相連的直線。qpolypolyline 畫多組相連的線。qarc 畫橢圓線。qpolybezier和polybezierto 畫貝塞爾曲線。q正弦曲線程序sinewave 畫線函數(shù)與畫筆n畫線函數(shù)q與畫線函數(shù)相關(guān)的設(shè)備描述表的屬性:當(dāng)前畫筆的地址、畫筆、背景方式、背景色和繪圖模式qmovetoex函數(shù)改變(確定)畫筆當(dāng)前地址,用point結(jié)構(gòu)體表達地址信息,可利用getcurrentpositionex函數(shù)獲得畫筆當(dāng)前地址。n圖形函數(shù)qrectangle畫矩形qpie 畫部分橢圓,呈扇形qchord畫部分橢圓,呈弓形畫線函數(shù)與
7、畫筆n圖形函數(shù)q畫矩形rectangle (hdc, xleft, ytop, xright, ybottom) ; 畫線函數(shù)與畫筆n圖形函數(shù)q畫橢圓ellipse(hdc, xleft, ytop, xright, ybottom) ; (xleft, ytop), (xright, ybottom)構(gòu)成的虛線稱為橢圓的外接矩形 畫線函數(shù)與畫筆n圖形函數(shù)q畫圓角矩形roundrect(hdc, xleft, ytop,xright, ybottom, xcornerellipse,ycornerellipse) q如果xcornerellipse等於xleft與xright的差,且ycorn
8、erellipse等於ytop與ybottom的差,那么roundrect函數(shù)將畫出一個橢圓,這個橢園是由四個園角所組成。 畫線函數(shù)與畫筆n圖形函數(shù)qarc 畫橢圓線,pie 畫部分橢圓,呈扇形(封閉),chord畫部分橢圓,呈弓形(封閉)q參數(shù):(hdc, xleft, ytop, xright, ybottom, xstart, ystart, xend, yend) 畫線函數(shù)與畫筆n畫筆q通常利用設(shè)備描述表中的默認畫筆進行畫線,也可以把預(yù)先設(shè)計好的畫筆放入設(shè)備描述表中,然后用其畫線。qwindows提供三種畫筆:black_pen, white_pen,null_penq獲取系統(tǒng)畫筆:g
9、etstockobject(white_pen)q設(shè)置設(shè)備描述表畫筆:selectobject(hdc,hpen);畫線函數(shù)與畫筆n畫筆q畫筆的建立nhpen=createpen(ipenstyle,iwidth,crcolor) createpenindirect(&logpen) hpen=getobject(hpen,sizeof(logpen), (lpvoid)&logpennipenstyle:ps_solid ps_dash ps_dot ps_dashdot ps_null ps_insideframeqps_insideframe:與填入?yún)^(qū)域的函數(shù)一起使用時,該樣式可以保證畫
10、出的線條在邊界框之內(nèi)。畫線函數(shù)與畫筆n畫筆q畫筆的刪除n在wm_create消息期間建立,則在wm_destroy消息期間刪除:deleteobjectn在wm_paint消息期間建立的畫筆,一定要在endpaint前刪除n注意:不要刪除設(shè)備描述表中當(dāng)前選擇用的畫筆畫線函數(shù)與畫筆n背景模式qopaque(不透明):windows使用背景顏色來填入空隙。qtransparent(透明):windows不使用背景顏色來填入空隙。q通過setbkmode改變n背景顏色q通過setbkcolor改變畫線函數(shù)與畫筆n“位布爾運算”與畫線模式q當(dāng)windows使用畫筆來畫線時,它實際上執(zhí)行的是畫筆像素與目
11、標(biāo)地址處原有像素之間的某種“位布爾運算”。qwindows定義了16中運算模式,亦即畫線模式,如r2_copypen,windows只是將畫筆像素復(fù)制到目標(biāo)像素。q通過setrop2(hdc, idrawmode)改變運算模式q典型: r2_copypen、r2_black、r2_nop畫圖n概念q與畫線函數(shù)的區(qū)別,不僅要畫邊界框,還要畫出區(qū)域中填入顏色n圖形的填入畫刷q默認情況使用白色畫刷,windows定義了6種畫刷q修改畫刷nhbrush=getstockobject(gray_brush)nselectobject(hdc,hbrush)q注:無邊框或者無填充的圖形畫圖n畫刷的建立qc
12、reatesolidbrush(crcolor)qcreatehatchbrush(ihatchstyle,crcolor)nihatchstyle:hs_horizontal。n畫刷的選擇和刪除qselectobject(hdc, hbrush)qdeleteobject(hbrush)gdi映射方式n概念q為便于用戶使用,windows提供了8種設(shè)備輸出坐標(biāo)表達方式,如:像素、毫米、英寸等,也就是gdi函數(shù)中使用的邏輯單位。qwindows中一切設(shè)備都用統(tǒng)一的單位:像素q因此需要將邏輯單位轉(zhuǎn)換到設(shè)備單位,即為映射方式,mm_text,mm_loenglish,mm_himetric。qsetmapmode(hdc,imapmode)gdi映射方式n設(shè)備坐標(biāo)和邏輯坐標(biāo)qwindows中,一切設(shè)備都用統(tǒng)一的坐標(biāo),此坐標(biāo)稱為設(shè)備坐標(biāo)。q所有設(shè)備坐標(biāo)系都以像素為單位,水平軸上的值從左到右遞增,垂直軸上的值從上到下遞增。qwindows對所有消息,對所有非gdi函數(shù),甚至一些gdi函數(shù),
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 住宅室內(nèi)裝修合同
- 三農(nóng)村基層法治建設(shè)與實踐方案
- 模板安裝施工方案
- 建筑施工工程承包合同條例
- 鋪筑施工方案
- 洗手間防水卷材的施工方案
- 《大數(shù)據(jù)技術(shù)導(dǎo)論》-教案
- 安徽省宿州市靈璧縣2024-2025學(xué)年上學(xué)期八年級數(shù)學(xué)期末試卷(原卷版+解析版)
- 自貢賓館消防施工方案
- 年產(chǎn)1000噸微生物菌劑項目環(huán)評報告表
- 【道法】做自信的人課件 2024-2025學(xué)年統(tǒng)編版道德與法治七年級下冊
- 高一英語完形填空專項訓(xùn)練100(附答案)及解析
- 績效考核 五金廠績效考核
- 金合極思打板與放碼系統(tǒng)幫助目錄
- 勵磁系統(tǒng)檢修規(guī)程
- 武術(shù)健身操教案《旭日東升》(共18頁)
- WE-100B300B600B1000B型萬能材料試驗機使用說明書
- 相聲《治病》
- 盾構(gòu)施工標(biāo)準化手冊
- 貴州省義務(wù)教育階段中小學(xué)生轉(zhuǎn)學(xué)申請表
- 高壓法蘭檢查方法
評論
0/150
提交評論