C語言是怎麼實現圖形界面的?

幾何遊客


想必你問的是windows上用C實現圖形界面,另外有些回答說C必須調用庫才能實現圖形界面。看得出,很多都是沒有寫過驅動的。首先,我們有一個顯示器,顯示器是一個個小點組成的。顯示器有很多種接口,CPU/GPU通過這個接口(操作寄存器)和顯示器通訊,在上面畫上一個個點。然後點連成線,點變成圓。。。等等基本圖形,把這些封裝成函數,加之封裝填充之類的函數,構成了最底層的GUI。後面又經過抽象,有圖層等的概念。這就是圖形庫了。然後各種語言調用圖形庫完成顯示。C語言完全可以從底開始寫圖形界面。但是沒必要。


Suaig


你能接觸到的顯示接口都是別人的庫,比如DirectX,OpenGl,GDI,安卓的Canvas,ios的CoreGraphic等。

這個庫一般分為兩類,一類是面向GPU的操作庫,一類是面向圖形算法和內存的庫。

面向GPU比較典型的就是DirectX和OpenGL.

他們接口偏向硬件,實現比較簡單的紋理貼圖功能,直白點就是給多個三角形,給紋理,然後顯示。你可以拿著其他工具導出的模型(三角形和貼圖定義),預先加載特定的紋理之後,作簡單移動,縮放等操作。各種矢量變化控制工作由CPU端完成,而數據量較大的紋理貼圖由GPU完成。

而GDI或者安卓的Canvas,ios的CoreGraphic是比較複雜的二維圖形算法集成庫,一般都是在CPU端作很多工作,然後把工作結果以內存幀的方式提交給GPU。這種方式下,CPU和GPU之間的傳輸帶寬,以及你的工作機制非常影響速度。比如,安卓的SurfaceView畫整屏會比更新局部的操作慢很多。


三袋大菠蘿


C語言從底開始寫圖形界面(現在基本不採用)

FC十大中文遊戲,有魂鬥羅系列、赤色要塞、重裝機兵、淘金者、超級馬里奧兄弟、坦克大戰、松鼠大作戰、惡魔城、俄羅斯方塊等等,這些FC經典遊戲基本都是採用從底層直接寫圖形。

使用第三方庫

用圖形庫是EsayX,支持VC++,VS,底層還是windows編程。操作簡單,實用性方便。(近期寫的電子相冊如下)

特別說明:學習C/C++基礎的時候,我們調用的是dos 窗口,windows自帶的終端處理窗口,是沒有屬於自己的可視化窗口。


C語言基礎


大二微機原理,上機考試就是使用匯編寫一個圖形輸入輸出界面,使用BIOS中斷來畫屏幕上的每個座標、每個色彩、每個像素……直到現在也忘不了。


RaymondIT


語言就是語言,圖形相關框架是操作系統提供的,操作系統提供這些圖形api接口可以多種語言形式提供,比如win下實現ui界面,可以調用微軟提供的platform adk中的c/c++接口,也可以用c#,vb封裝的sdk接口來做,還可以用跨平臺的QT來做ui,這些不同的sdk接口只是上層封裝提供的接口不同罷了。


BinaryHead


c語言本身無法實現圖形界面,圖形界面一般都是由操作系統,或者圖形庫提供,所以需要調用系統api,或者圖形庫api。


zhangyiant


不要管這個,這個技術已經被淘汰。


DblHpp


C語言實現圖形界面可以使用第三方圖形庫,目前市面上有很多圖形庫,你可以自行去網上查閱一下,我用圖形庫是EsayX,支持VC++6.0,VS2008-2019各個版本。


KINGEL


直接調用硬件接口,把想要的圖形放在需要的位置上。


shinomiyaaoi


驅動程序把顯卡腳本送進去執行啊


分享到:


相關文章: