嵌入式Linux 系統中UI( 用戶界面) 編程需要圖形庫的支持,圖形庫可以看作基本的圖形繪制支撐庫,在嵌入式Linux 系統中比較出名的有QT3/QT4 、Gtk+2 、MiniGUI 等,QT3/QT4 由QT 公司開發,目前被Nokia 收購;Gtk+2 是開源的圖形庫,對Linux 提供原生支持;MiniGUI 由北京飛漫公司開發。三者都支持跨平台編譯和編程。事實上圖形庫(GUI )還有很多種,那么如此多的圖形庫,同時你想圖形編程,肯定面臨選擇的問題,學QT3/QT4 好,還是學Gtk+2 好,學MiniGUI 好,還是學MFC (Windows CE/Mobile 流行圖形庫),其實這些不是學習圖形庫的關鍵,因為不同的庫提供的接口API 函數不同,編程語言也不同(MiniGUI 和Gtk+2 使用C 語言、QT3/QT4 和MFC 使用C++ ),編程風格也有很大差異。關鍵在於學習圖形庫的核心模塊,其實核心模塊也不多,主要包括輸入控制、輸出顯示、初級繪圖、窗口部件、字庫解析和解碼、圖片解碼庫等。
圖形庫(GUI )核心模塊- 輸入控制 ,在嵌入式Linux 系統中如果需要用到圖形庫,輸入控制是比較重要的需求,輸入控制有幾種常用的類型,鍵盤是其中一個,有些嵌入式系統需要的鍵盤和PC 機一樣,叫Keyboard ,有些需要小鍵盤如手機,這種通常專業一點的叫法是Keypad ,還有一種是軟件鍵盤,就是在觸摸屏上模擬一個鍵盤(現在智能手機上比較流行),對於圖形庫來講鍵盤有3 個重要的檢測量,就是按下(Down) 、彈起(Up )和碼字(KeyCode ) ,其中碼字和實際的鍵盤按鍵一一對應,當然還有特殊,就是組合鍵;觸摸屏是另外一種常用的輸入控制,英文名叫TouchScreen ,除了可以模擬一個軟鍵盤,它還可以模擬鼠標(Mouse) ,對於圖形庫來講觸摸屏有5 個重要的檢測量,就是按下(Down) 、彈起(Up )、坐標位置( Axis ) ,單擊(Single-clicked) 和雙擊(Double-clicked) , 目前比較流行手機手勢識別(如划拉功能),就是通過這些量的計算和組合來實現的;鼠標(Mouse) 是和觸摸屏類似的輸入設備,不過在大多數的嵌入式系統中都是用觸摸屏來替代鼠標(Mouse) ,所以對於圖形庫來講鼠標需要檢測的量和觸摸屏相同, 也就是說在PC 機上開發嵌入式軟件時可以用鼠標模擬鍵盤。以上嵌入式系統中常用的輸入設備,當然還有其它的輸入設備,如游戲機操縱桿(Joktick )等都屬於比較專用的輸入設備了。
圖形庫(GUI )核心模塊- 輸出顯示 ,如果嵌入式系統沒有顯示設備,那就不需要圖形庫(GUI )了,如果用到了圖形庫(GUI ),添加顯示設備就是必須了,嵌入式系統比較常用的顯示設備是LCD ,特殊的應用之中也有用CRT 作為顯示設備的(如醫療用的監視器),比較而言LCD 最為常用,其實支持CRT 還是支持LCD 是硬件和驅動的事情,對於圖形庫來講和輸出顯示設備最密切的是圖象緩沖區(又叫Famebuffer ), 就是說圖形庫是通過Famebuffer 來顯示的,也許Famebuffer 對你來說比較抽象,你可以這么理解,Famebuffer 就是一張白紙,圖形庫就是帶橡皮的鉛筆在白紙(Famebuffer )畫畫,帶橡皮的意思是可以在同樣的這張白紙上改畫的內容,如果用彩筆就可以畫彩畫了,橡皮也許就要改用塗字液了。除了Famebuffer ,輸出顯示和圖形庫相關的還有顯示模式,是RGB888 還是ARGB8888 還是RGB565 等, 這些在以后的文章中將做解析。
圖形庫(GUI )核心模塊- 初級繪圖層 ,初級繪圖層是圖形庫(GUI )最基礎的繪制模塊,如果還要找更基礎的那就是打點,打點和顯示輸出設備的的單個像素(Pixel )對應,是圖象顯示的最小單元,其它的初級繪圖都是以打點函數為基礎來實現的 ,如畫線,畫弧、畫橢圓、畫長方體、畫折線、畫扇形、繪字、貼圖等等都是用打點來實現的。為什么會有初級繪圖模塊,初級繪圖其實是對現實物體的抽象,看看你的周圍,物體都是點、線、圓、面組成,看深一點,到分子元字,那個層次,也是點、線、圓、面組成。所以用最基礎的繪制原理上是可以實現對現實中各個實物的繪制和模擬的。事實上圖形庫(GUI )編程的實踐也證明其正確性。
圖形庫(GUI )核心模塊- 窗口部件 ,窗口部件是基於初級繪圖的基礎實現, 它應需求而生,就是說窗口部件的底層是初級繪圖層,窗口部件是初級繪圖層的一種封裝實現,如果沒有窗口部件,你也可以通過初級繪圖層來實現編程,不過這將十分的麻煩,所以為了簡化UI 編程,就將常用的 一些初級繪圖層實現的部件提取出來,划分為另一個層次就是窗口部件層,它實現的東西比較多,常用的有Label 、Button/PushButton 、Combobox 、Checkbox 、RadioButton 、Hbox 、Vbox 、Groupbox 、SpinBox 、Splash 、TextEdit 、LineEdit 等,相關聯的有Backgroud 、Border 、Margin 、Frame 、Style 等。窗口部件可以用來實現其它常用的典型窗口如對話框(Dialog )、主窗口(MainWindows) 、文件管理器(FileManager )等等,這些都屬於窗口部件的上一層,在嵌入式系統應用中,UI( 用戶界面) 集中在窗口部件的改造、封裝和應用上,因為初級繪圖層太基礎,而之上的的已實現的Dialog 、MainWindows 、FileManager 往往是不能滿足需求的 ,所以需要設計自己的差異化的滿足實際需求的Dialog 、MainWindows 和FileManager 等等。只有這樣才能做出漂亮的界面,最主要是和別人不同(差異化)。
圖形庫(GUI )核心模塊- 字庫解析和解碼 ,圖形庫比較重要的另外的模塊是字庫解析和解碼,世界上有多個國家,采用的文字不一樣,如何兼容和顯示不同的文字(對應不同的字庫)就需要用到字庫解析和解碼,就是說要顯示中文就需要中文字庫和中文字庫解析與解碼器,如過要顯示英文,就需要英文字庫和英文字庫解析與解碼器,要顯示日、韓文就需要日、韓字庫和日、韓字庫解析與解碼器。專業的叫法是國際化和本地化,就像一個會說各種語言的人,不同的場合說不同的語言,字庫解析和解碼就做同樣的事情。
圖形庫(GUI )核心模塊- 圖片解碼庫 ,圖片解碼庫是圖形庫(GUI )重要的組成模塊,圖形除了形就是圖,所以圖的處理是圖形庫的非常重要組成,圖就是圖片,在現實世界里圖片存在着格式的差異,比較流行的格式用Bitmap 、Jpeg 、Png 、Gif 、Tiff 等,為了支持一個格式必須提供這種格式圖片的解碼器。圖片解碼庫最常用的有兩個方向,一個是用於實現圖片瀏覽器,另外是用於帖圖,目的是優化界面,使之顯示的漂亮美觀。
學習UI (用戶界面)編程就需要學好圖形庫,而學好圖形庫不在於學習MFC 還是學習QT3/QT4 或者學習Gtk+2 ,而在於學習圖形庫的基礎實現核心模塊,知道圖形庫能干什么,怎樣才能干什么才是UI (用戶界面)編程的靈魂。
本文來自CSDN博客,轉載請標明出處: