引言 對于各種各樣應用日益廣泛的嵌入式系統而言,除了應用功能強大外,人機界面的美觀也是吸引用戶的重要方面。因此,越來越多的嵌入式系統開發人員希望:LCD上除了顯示圖案固定的菜單以外,再添加適量的動畫,使得整個界面屏幕更加活潑可人。用于動畫設計的程序設計語言有多種,并且有多種方法,根據是否需要借助于其他應用軟件和程序,可以將這些方法分成兩大類:第一類是只使用各種編程語言及開發環境中包含的文件和框架實現的設計方法;第二類則是安裝相關軟件(諸如Flash、Di-rectDraw等),在相關語言的開發環境中將這些軟件的功能文件包含進去,來共同實現動畫設計的方法。而嵌入式系統由于其極強的專用性、實時性要求,傳統采用的開發語言并不是很多,雖然動畫界面在嵌入式系統應用中并非高優先級的程序,但開發人員在選取其設計方法時,也應該辨明利弊,靈活使用,這樣才能看到更加賞心悅目的界面,而不是被LCD上凌亂不堪的顯示內容所困擾。 1 不需安裝第三方軟件的動畫設計方法分析 (1)Logo適用于簡易的嵌入式設備的動畫設計 Logo語言的設計方法最為簡單。它內置一套(Turtle Graphics)系統,其本身就是一種繪畫語言,理論上可以加載到嵌入式系統中作動畫開發;然而,因為一個嵌入式系統會有很多別的軟件設計部分,其他功能都采用Logo顯然并不合適,而要在一個嵌入式系統中安裝兩種開發環境更加不現實。所以,若在嵌入式系統開發中選用這種方法制作動畫,應該只適合用于兒童用的復雜程度同等的簡易的嵌入式設備。 (2)最適合嵌入式系統使用的擦除法 C語言是嵌入式系統開發使用最多的語言,并且高中低檔的系統都可以用,因而采用C語言的所有動畫設計方法,理論上均適用于嵌入式系統的屏幕動畫開發。然而,諸如利用動態開辟圖視口方法、利用顯示頁和編輯頁交替變化、利用畫面存儲再重放的方法,以及直接對圖像動態存儲器進行操作的方法等程序比較復雜,且要對圖像不斷進行存取操作,這需要耗費大量內存資源;而擦除法動畫設計則可以解決上述問題。其設計原理是:利用同色原理,當圖形色與背景色相同時人眼不能感知。在動畫設計中,當在一個位置畫了一張圖像時,使圖像色與背景色相異,然后再到另一個位置畫一張圖像并使圖像色與背景色也相異,此時將先畫的圖像在原位置再畫一張,并使圖像色與背景色相同,這樣人眼只能看到新畫的一張圖像而看不到先前畫的圖像,從而先前畫的圖像感覺被擦除了。 這樣連續畫多張圖像并在每畫一張新的圖像時將原來的圖像擦除,從而在觀察者看來就實現了動畫的效果。綜上所述,從耗費資源較少且執行速度較快的角度出發,筆者認為,采用C語言設計動畫的常用方法中,最適合嵌入式系統使用的是首選擦除法。 (3)CBuilder語言本身不太適合嵌入式開發 采用CBuilder語言設計動畫,可以方便地利用現成的組件產生圖像及控制時間,從而解決了動畫設計中兩個非常重要的問題。然而CBuilder語言本身不太適合嵌入式開發,因為嵌入式開發對空間、效率都要求較高,而CB是針對高層的應用程序開發的工具。但是,有兩點值得注意:首先,現在很多公司做嵌入式開發多是自己搞一套系統,使其適合使用CB完全可以做到;另外,Borland公司正在開發嵌入式的C++,可以期待。 (4)Java語言非常適合嵌入式系統的屏幕動畫設計Java語言是嵌入式系統開發經常采用的語言,在手機中更是應用良多。Java語言的動畫設計方法通過定義線程的方法來控制動畫時間;而使圖像動的平滑的雙緩沖方法需要很大內存,因而更常用的消除畫面閃爍的辦法是重載upGlate()。 (5)C++語言方法均可用于嵌入式系統動畫設計 面向對象的C++語言中,可供選擇的動畫設計方法很多:簡單的動態圖像(如不斷閃爍的星星)可以采用底色覆蓋法;在屏幕的固定位置顯示動態圖像時,可以選擇多圖片切換法;利用異或方式進行繪圖不會發生全屏幕閃動,通常效果較好,但若反復使用,在所清除圖像處會產生閃爍,仍不是很完美;像素操作一般和其他動態圖像實現方法(如底色覆蓋)相結合使用;多緩沖技術是將圖形繪制在不同的幀中,通過將屏幕在這些不同的幀之間進行切換,來達到動畫效果;具體的幀數目可以根據實際動畫的需要自行確定。這類似于C語言中的雙緩沖技術原理,只不過雙緩沖只繪制一份備用圖像作為離屏圖像,而多緩沖則將圖形繪制在多個不同幀中,將屏幕在這些幀之間進行切換。 因為工業方面大多用C/C++作為嵌入式系統的開發語言,所以這些方法都可用于嵌入式系統動畫設計。在Nord-Tec SoftWare開發的Nord-Tec Snow Flakes屏幕保護程序中,逼真的雪花動畫便是利用多緩沖技術實現的。 (6)繪制復雜風格線條的方法 在GIS(地理信息系統)類軟件設計中,經常需要在繪圖時使用一些相對固定但又頻繁使用的一些用以代表地理狀態的符號,如河流、鐵路、海岸線等等。顯然,這些基本符號圖形一般都是相對復雜的線條,在MFC提供的基本類庫中并未提供可以直接使用的相關函數;即使是在繪圖功能比較強大的CDC中,也僅僅提供了 LineTo()、Set-Pixel()等一些通用的最基本的繪圖函數。使用這些函數來繪制GIS基本符號是效率比較低的一種辦法,這在大量的繪圖操作中將會表現得比較明顯,因此不宜提倡。但是,可以通過Windows NT 3.1中首次出現的Win32.API函數LineDDA,來解決這一繪制復雜風格線條的問題。 (7)使用VC實現高速平滑的簡單動畫的方法 許多軟件(特別是游戲軟件)的開發中,實現高速平滑的動畫需要比較深的技術,如OpenGL、DirectX,并且可能還要開發人員有深厚的數學功底。但是,如果只是在開發嵌入式系統過程中,想為應用程序的界面實現一些動畫效果,就可能不用以上這些技術了,更多的是用WindowsAPI提供或MFC封裝后的GDI繪圖函數來實現。雖然所需動畫的復雜程度不高,但作為開發人員,并不能為此就降低對動畫效果的要求。因此,需要了解如何用GDI函數來開發平滑無閃、高速的動畫。 該技術的關鍵就是在內存中創建一個與顯示動畫的窗口區域一樣大的位圖,先用GDI函數繪制位圖,然后在適當的時候從內存中顯示出來。因為位圖已經繪制好,不象平時編程那樣邊繪制邊顯示,所以,顯示一幀圖形時便減少了閃爍,從而實現平滑動畫;同時,由于圖形是從內存中直接顯示到當前窗體的,所以速度很快,從而實現高速動畫。如果再創建一個線程后臺繪制圖形,將會實現很多特殊效果的動畫,使嵌入式系統的用戶界面收到意想不到的效果。 在此基礎上,還可以在顯示位圖時作優化顯示。例如:不是將位圖全部顯示出來,而是顯示其中動畫的一部分,因為BitBlt函數作位傳輸很慢。這樣更符合嵌入式系統重視效率的特點。 2 需要安裝第三方軟件的動畫設計方法分析 (1)為教學研究開發的嵌入式設備可使用Ubigraph graphviz和Ubigraph都是圖論生成軟件,但Ubig-raph功能更強,利用它可以快速生成圖論模型的圖形和動態圖像,直觀地展示出各種圖論模型的三維結構,演示各種圖論算法的過程。因為可以嵌入到Java、C、C++等語言中,所以當然適合用于嵌入式系統的動畫設計,尤其是一些專門為教學研究開發的嵌入式設備。 (2)Flash對嵌入式系統而言太過華麗 Flash是一種功能強大的矢量動畫軟件,但是所用到的高級技術比較多,不過為了能夠做出精美的電影特技效果的動畫,還是值得對其進行深入研究的。然而,對于嵌入式系統開發而言,它實在是太過華麗了;如果不是特別需要突出游戲或者動畫的精致效果,一般開發者應該不會舍本逐末以此來犧牲系統的速度和容量。 (3)DirectDraw方法對嵌入式系統的適用度 DirectDraw使用頁面切換的方法實現圖像動態。它不僅可以訪問系統內存,還可以訪問顯示內存,實現圖像動態的同時不會使得畫面閃爍,是一種“完美切換”技術;因此DirectDraw技術很受程序員青睞,尤其在虛擬現實技術中應用廣泛。但是,顯而易見,該方法需要占用很大內存,安裝所需的開發文件同樣需要較大硬盤空間,應用到一般的嵌入式系統中,對反應速度等的限制將會比較明顯。 其實,用DirectDraw編程的核心要點即“幾個表面之間拷來拷去”。在對界面的動畫復雜程度要求不高的嵌入式系統中,可以采用C程序作為開發語言,并且在動畫實現方法上,利用前述C程序設計中顯示頁和編輯頁交替變化的方法,來代替幾個表面交替拷貝的DirectDraw方法。然而,如果是大型的嵌入式系統,并且重視界面動畫效果,采用DirectDraw方法和面向對象開發語言,仍然是更好的選擇。 當然,若對美術工藝有特殊要求,可以嘗試將更專業的技術(如顏色鎖結及用于3D效果的Z排序與視差)引入到嵌入式系統軟件設計中——這種系統本身也應該是專業的、功能專用的,否則只能停留在理論上,難以實現! 3 可用于嵌入式系統開發的腳本語言 當動畫應用于網絡時,可以選擇直接使用腳本語言設計,譬如JSP、PHP等。當今的很多嵌入式系統都有連接網絡的需求和相應功能,雖然大多數系統的屏幕動畫都不涉及對外發布的問題,但在聯網嵌入式系統的開發中直接使用腳本語言編寫動畫,也不啻為一個新的思路。 Python可作為嵌入式系統的開發語言(在Nokia智能手機所采用的Symbian操作系統上已得到證明)。它最大的優勢是能夠很輕松地把使用其他語言制作的各種模塊(尤其是C/C++)輕松地聯結在一起。由此,既可以直接使用Py-thon編寫簡單的界面動畫,也可以將對速度要求更高的復雜動畫使用 C++語言編寫后嵌入到Python程序中。 參考文獻 1. 李笑緣.動畫設計教程[M].上海:上海人民美術出版社,2007. 2. 莫治雄,熊偉建.FlashMX網上動畫編程指南[M].北京:北京希望電子出版社,2003. 3. 甘泉.PC游戲編程[M].重慶:重慶大學出版社,2003. 4. 徐保民.PHP編程基礎及應用實例集錦[M].北京:人民郵電出版社,2001. 作者:海軍潛艇學院 張亦楠 馬曾 朱偉良 來源:《單片機與嵌入式系統應用》 2009(11) |