小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

關(guān)于C語(yǔ)言的圖形編程

 戰(zhàn)神之家 2014-04-28

發(fā)表于 2010-6-7 21:19 | 來(lái)自  51CTO網(wǎng)頁(yè)

[只看他] 樓主

老是被同學(xué)們問(wèn)一些關(guān)于C語(yǔ)言初學(xué)時(shí)的圖形編程問(wèn)題,感覺(jué)有點(diǎn)代表性,這里統(tǒng)一做個(gè)回答。
一家之言哈,歡迎拍磚。
問(wèn)題:
1、為什么VC下找不到BGI文件?
2、我按照書(shū)上寫(xiě)的把程序輸入,編譯時(shí)發(fā)現(xiàn)找不到graphics.h文件
3、VC是不是不支持圖形開(kāi)發(fā)啊?
4、... ...
問(wèn)這類(lèi)問(wèn)題的同學(xué)還很多,總的來(lái)說(shuō),我覺(jué)得這些同學(xué)應(yīng)該屬于初學(xué)C語(yǔ)言,對(duì)于語(yǔ)言、操作系統(tǒng)、平臺(tái)的概念還不清楚,因此會(huì)問(wèn)這類(lèi)問(wèn)題。
首先,糾正一點(diǎn),C語(yǔ)言就是C語(yǔ)言,是負(fù)責(zé)編制程序?qū)崿F(xiàn)計(jì)算的,真正的C語(yǔ)言,是不帶任何平臺(tái)相關(guān)特點(diǎn)的,而圖形、聲音,是平臺(tái)相關(guān),因?yàn)椴皇敲總€(gè)計(jì)算平臺(tái)都有圖形界面,因此,最原始的C,甚至是C++語(yǔ)言,是不帶任何圖形開(kāi)發(fā)接口的。
就我本人而言,也犯過(guò)類(lèi)似的迷糊,最開(kāi)始我們?cè)贏pple II計(jì)算機(jī)上開(kāi)發(fā),由于其Basic語(yǔ)言是和計(jì)算機(jī)綁定在一起的,硬件也有圖形開(kāi)發(fā)接口,使用匯編語(yǔ)言也能直接開(kāi)發(fā),因?yàn)?,我就想?dāng)然地認(rèn)為,計(jì)算機(jī)一定可以繪圖的。
后來(lái)學(xué)習(xí)了計(jì)算機(jī)圖形學(xué),才發(fā)現(xiàn)不是這么一回事,圖形終端,是單獨(dú)的一門(mén)大學(xué)問(wèn),和計(jì)算機(jī)基本上是割裂的,在以前大中小型機(jī)的時(shí)代,一臺(tái)計(jì)算機(jī)可以帶字符終端,如電傳打字機(jī),也可以帶圖形終端,不過(guò),有圖形終端的一般叫圖形工作站,呵呵,很拉風(fēng)的。
記得90年我在石油物探局玩了一次Sun Sparc 490圖形工作站,我當(dāng)時(shí)都迷了,90年,人家音頻、視頻接口就是標(biāo)配,XWindows比我們現(xiàn)在的XP什么的好看多了,按鈕全是圓弧帶陰影的,硬件實(shí)現(xiàn)實(shí)三維計(jì)算。記得當(dāng)年是瞞著巴統(tǒng)進(jìn)來(lái)的,一臺(tái)120萬(wàn)美金,確實(shí)是好東東,20年前的配置,到現(xiàn)在都不見(jiàn)得落后多少。
呵呵,說(shuō)遠(yuǎn)了,主要是請(qǐng)大家清楚一點(diǎn),計(jì)算機(jī)里面還是可以細(xì)分的,圖形系統(tǒng)是圖形系統(tǒng),計(jì)算機(jī)是計(jì)算機(jī),我們大家一般都是從微型計(jì)算機(jī)PC開(kāi)始學(xué)習(xí)編程的,再加上現(xiàn)在Windows系統(tǒng)這么流行,可能有點(diǎn)想當(dāng)然,以為圖形顯示卡是一臺(tái)計(jì)算機(jī)的標(biāo)配,呵呵,不一定的。
好,話(huà)說(shuō)回來(lái),大家可能還有個(gè)誤區(qū),以為C語(yǔ)言,C++語(yǔ)言,以及Java這些東東,是PC機(jī)的語(yǔ)言,其實(shí)也不是的,計(jì)算機(jī)硬件是硬件,軟件是軟件,C和C++都有自己的標(biāo)準(zhǔn)協(xié)會(huì),Java有Sun公司在維護(hù),因此,這些語(yǔ)言的產(chǎn)生和發(fā)展,其實(shí)和PC平臺(tái)沒(méi)有太多關(guān)系。
最起碼,C就是為Unix而生的,而Unix一般是大中小型機(jī)的標(biāo)準(zhǔn)操作系統(tǒng),Windows最開(kāi)始提供的是Pascal格式的api,大家查查Win32API,很多很古老的函數(shù)接口,前面都要有PASCAL修飾,表示這個(gè)接口符合PASCAL標(biāo)準(zhǔn)。甚至,目前我們用的匈牙利命名法,其實(shí)是Pascal的命名法,發(fā)明者是個(gè)匈牙利人,應(yīng)該是Windows api的主要制定者之一。
因此,大家可以想象,C和C++語(yǔ)言的基本庫(kù),本來(lái)就不可能綁定任何一個(gè)平臺(tái),一定只會(huì)利用各個(gè)平臺(tái)共有的特點(diǎn)來(lái)完成設(shè)計(jì),而圖形系統(tǒng),大家可以想象,各個(gè)平臺(tái)都不一樣,很難有個(gè)通用的庫(kù),所以,真實(shí)的C語(yǔ)言里面,其實(shí)是不帶圖形啊,聲音啊這類(lèi)庫(kù)的,這些都是各個(gè)硬件、操作系統(tǒng)軟件開(kāi)發(fā)商,自行提供的。
VC是個(gè)特例,VC準(zhǔn)確的講,應(yīng)該不是一門(mén)C和C++的教學(xué)型語(yǔ)言,它更像Windows平臺(tái)定制的一個(gè)實(shí)用性C和C++語(yǔ)言。因此,他天生就有對(duì)Windows的集成性,自然支持Win32API中關(guān)于GUI的圖形函數(shù),因此,VC是可以繪圖的。只要你有一個(gè)窗口,就可以再窗口DC上繪圖。如果使用DirectX的話(huà),甚至可以利用虛擬的表面,直接訪問(wèn)顯存,實(shí)現(xiàn)高速繪圖,開(kāi)發(fā)游戲。
不過(guò)這里還得倒回去說(shuō)一點(diǎn),最開(kāi)始PC平臺(tái)使用DOS操作系統(tǒng),是沒(méi)有C語(yǔ)言的,當(dāng)時(shí)有家公司叫做Borland,看中這個(gè)市場(chǎng),推出了TurboC系列語(yǔ)言,后來(lái)又發(fā)展到Borland C++系列,大家不要跟我說(shuō)不知道啊,Delphi知道不?
當(dāng)時(shí)DOS平臺(tái)一般都有圖形卡,但卡的類(lèi)型很多,而DOS顯然又沒(méi)有Windows這樣,提供統(tǒng)一的api接口訪問(wèn),因此,需要進(jìn)行圖形繪制的廠商,一般需要自己根據(jù)各個(gè)卡型開(kāi)發(fā)自己的驅(qū)動(dòng)程序,以前有段時(shí)間,臺(tái)灣的游戲很流行,很多游戲一上來(lái)就讓玩家選擇顯卡,如EGA、VGA等等,就是在選擇驅(qū)動(dòng)程序。
驅(qū)動(dòng)程序其實(shí)不復(fù)雜,就是封裝各個(gè)圖形卡的差異性,對(duì)上提供統(tǒng)一的api接口供上層函數(shù)調(diào)用,驅(qū)動(dòng)一般都是匯編和C語(yǔ)言開(kāi)發(fā)的。目前有很多工作崗位,招嵌入式開(kāi)發(fā)工程師,主要就是寫(xiě)驅(qū)動(dòng)。看見(jiàn)沒(méi),嵌入式由于沒(méi)有Windows這個(gè)統(tǒng)一的界面,也需要寫(xiě)驅(qū)動(dòng)。
這里就要夸夸比爾蓋茨了,他的Windows系統(tǒng)其實(shí)意義重大,不僅僅起到了圖形界面操作系統(tǒng)的用途,它實(shí)際上整合了PC平臺(tái)的驅(qū)動(dòng)標(biāo)準(zhǔn),各個(gè)硬件廠商以后只要給Windows寫(xiě)驅(qū)動(dòng)就好了,不需要針對(duì)每個(gè)應(yīng)用分別寫(xiě)驅(qū)動(dòng),如AutoCAD的驅(qū)動(dòng)和游戲的驅(qū)動(dòng)顯然就不是一碼事,這樣硬件廠商節(jié)約很多人力,自然說(shuō)好。
軟件廠商呢,只要針對(duì)Windows平臺(tái)開(kāi)發(fā),就自然而然支持所有符合Windows規(guī)范的硬件,也無(wú)需自己每種硬件都采購(gòu)一套,分別寫(xiě)驅(qū)動(dòng),這節(jié)約了大量的人力和無(wú)力,因此,Windows最成功的,我認(rèn)為還不是這個(gè)圖形界面,它整合了驅(qū)動(dòng)標(biāo)準(zhǔn),為業(yè)界節(jié)約了大量的成本,這是它的成功之處,值得稱(chēng)道。
好了,說(shuō)了這么多,再回到Borland,由于它做TurboC的時(shí)代,還是DOS操作系統(tǒng),沒(méi)有Windows這么方便,但是PC平臺(tái)的C語(yǔ)言,要是不支持圖形繪制,市場(chǎng)會(huì)大打折扣,大家不買(mǎi)啊,因此,他必須讓他的C語(yǔ)言支持圖形,但是,圖形卡有很多啊,因此,他就開(kāi)發(fā)出自己的圖形驅(qū)動(dòng)標(biāo)準(zhǔn),叫做BGI,這是一種文件格式,一般安裝一套TurboC,里面會(huì)帶一堆這個(gè)文件,就是針對(duì)各個(gè)不同顯卡的驅(qū)動(dòng)。
而上層的程序,使用graphics.h這個(gè)頭文件,調(diào)用標(biāo)準(zhǔn)BGI的api調(diào)用,即可實(shí)現(xiàn)圖形開(kāi)發(fā),至于針對(duì)各個(gè)不同的圖形卡,api中有查詢(xún)接口,告訴你選擇哪個(gè)BGI而已。
OK,問(wèn)上面問(wèn)題的同學(xué)們明白沒(méi)?
不過(guò)話(huà)說(shuō)回來(lái),DOS畢竟是淘汰的東東,目前已經(jīng)是Windows的世界,最起碼Linux的市場(chǎng)都比DOS大,因此,建議同學(xué)們自學(xué)C語(yǔ)言,還是看看書(shū)的出版年代,問(wèn)問(wèn)題的同學(xué)顯然對(duì)著一本TurboC的書(shū)在看,這很麻煩,學(xué)出來(lái)的東西一來(lái)不好做實(shí)驗(yàn),二來(lái)也沒(méi)有市場(chǎng),現(xiàn)在估計(jì)沒(méi)有哪家公司還在使用TurboC開(kāi)發(fā)。建議大家還是從VC學(xué)起吧。
VC下大家就不用問(wèn)了,Windows是圖形操作系統(tǒng),一定有圖形函數(shù)的,查查Win32API函數(shù)庫(kù),看看MFC,都能找到一堆。
這里簡(jiǎn)單提示幾點(diǎn):
1、Windows下,一切都是窗口,我們看到的一個(gè)軟件界面,如VC,如IE,是無(wú)數(shù)個(gè)窗口構(gòu)成的,甚至Dialog上每個(gè)按鈕,都是窗口。
2、Windows下,只要是窗口,就一定有句柄,Handle,這是每個(gè)窗口的靈魂,任何針對(duì)窗口的操作,幾乎都是從Handle開(kāi)始的。
3、一般說(shuō)來(lái),窗口分兩類(lèi),可顯示的和不可顯示的,大多數(shù)是可顯示的。只要可顯示,就可以利用GetWindowDC,從Handle獲得DC。
4、DC到手,天下我有。呵呵,拿到DC,大家就想怎么畫(huà)就怎么畫(huà)了??梢栽O(shè)定畫(huà)筆,刷子,字體,可以用畫(huà)點(diǎn),畫(huà)線的函數(shù),可以填充,裁剪,等等,GUI圖形雖然效率偏低,做高速游戲動(dòng)畫(huà)可能不夠,不過(guò),就大家目前做的圖形試驗(yàn),寫(xiě)個(gè)物理教學(xué)題材的軟件,做個(gè)化學(xué)實(shí)驗(yàn)軟件等等,足夠了。
OK,大家還有問(wèn)題嗎?
本文出自 51CTO.COM技術(shù)博客

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多