摘要:嵌入式系統(tǒng)下的漢字顯示一直是軟件開發(fā)的難點,由于一般只支持點陣漢字,并支持矢量漢字,已經(jīng)不能滿足綜合模塊化航電架構(gòu)下大屏顯示和觸摸控制的要求。文章通過分析基于貝塞爾曲線顯示矢量漢字的原理,綜合比較選擇插值補償系數(shù),結(jié)合具體實例進行了測試驗證。結(jié)果表明,采用該方法能夠?qū)崿F(xiàn)包括宋體、黑體等各種字體和字號的高質(zhì)量顯示,對漢字旋轉(zhuǎn)、縮放變換后顯示效果不失真,滿足了大屏觸控模式下對漢字縮放的顯示要求。
關(guān)鍵詞:嵌入式系統(tǒng);點陣漢字;矢量漢字;貝塞爾曲線;漢字輪廓
中圖分類號:TP311.5文獻標(biāo)志碼:A
0 引言
嵌入式系統(tǒng)由于資源有限,大多只支持點陣漢字,不支持矢量漢字 [1]。點陣字庫采用.c文件方式儲存信息,每個字信息都包含在一個數(shù)據(jù)結(jié)構(gòu)中,其中包含了字體的所有點信息,字體顯示時根據(jù)寬高將點信息直接送入顯存顯示。這種方式的字體實現(xiàn)簡單、顯示速度快。
隨著綜合模塊化航電(Integrated Modular Av-ionics,IMA)架構(gòu)的發(fā)展[2],大屏顯示和觸摸控制已成為主流,不僅要求畫面中漢字能清晰顯示,更提出了自由旋轉(zhuǎn)和縮放的新要求。目前,傳統(tǒng)的基于點陣漢字的實現(xiàn)方法存在一些局限性,點陣漢字每種字體和字號均需對應(yīng)的字庫文件,如顯示宋體(16×16、24×24、32×32)、黑體(16×16、24×24、32×32)就需要6個不同的字庫文件,維護管理十分麻煩;點陣漢字顯示畫面進行旋轉(zhuǎn)和縮放變換時,漢字產(chǎn)生模糊失真,效果不佳。為適應(yīng)大屏觸摸控制下對漢字的顯示要求,本文摒棄了傳統(tǒng)的基于點陣的漢字顯示方式,提出一種基于貝塞爾曲線的矢量漢字顯示方法。
1 貝塞爾曲線顯示漢字原理
1.1 獲取漢字輪廓
矢量字體中的每一個字形是通過數(shù)學(xué)曲線來描述的,它包含了字形邊界上的關(guān)鍵點,連續(xù)的導(dǎo)數(shù)信息等,矢量字體主要包括Type1、TrueType、OpenType和CFF等格式,采用幾何學(xué)中的二次/三次貝塞爾樣條曲線及直線來描述字體的外形輪廓。由于每個字符的輪廓信息是根據(jù)字形索引來存放的,而字形索引又通過字符的Unicode編碼來獲取,所以首先需要先設(shè)置字符的編碼格式,假如某些嵌入式系統(tǒng)的默認的字符編碼是GBK,因此還需要將GBK轉(zhuǎn)換為Unicode,然后通過Unicode編碼值來獲取字形索引,最后就可以在字庫文件中得到字符的輪廓數(shù)據(jù)。
1.2 漢字輪廓分析
漢字輪廓的貝塞爾曲線由起始點、終止點和控制點組成,描述如下:
(1)FT_CURVE_TAG_ON:點在貝塞爾曲線上,為起始點或終止點,其他的點為OFF點,表明該點不在貝塞爾曲線上,為貝塞爾曲線的控制點。
(2)FT_CURVE_TAG_CONIC:二次貝塞爾曲線控制點,一條二次貝塞爾曲線由一個起始點、一個終止點和一個控制點確定,如圖1所示。
(3)FT_CURVE_TAG_CUBIC:三次貝塞爾曲線控制點,一條三次貝塞爾曲線由一個起始點、一個終止點和兩個控制點確定,如圖2所示。
漢字輪廓的貝塞爾曲線插值補償按以下3種情況進行處理。
(1)輪廓線的點為FT_CURVE_TAG_ON,僅將該點記錄至錨點集,相當(dāng)于一次貝塞爾曲線(即線段),不用作插值處理。
(2)輪廓線的點為FT_CURVE_TAG_CONIC:計算并更新起始點和終止點,分為以下兩種情況:若該控制點已經(jīng)是輪廓線的第一個點,則起始點為輪廓線的最后一個點,否則為錨點集的上一個點。若該控制點為輪廓線的最后一個點,則終止點為錨點集第一個點,否則為輪廓線下一個點。
進行二次貝塞爾曲線插值,分為以下兩種情況:若輪廓線下一個點為FT_CURVE_TAG_ON,起始點和終止點按(1)條處理,然后進行二次貝塞爾插值補償;若輪廓線下一個點仍為FT_CURVE_TAG_CONIC,則終止點為該2個控制點的中值,然后進行二次貝塞爾曲線插值補償。
二次貝塞爾曲線插值公式為:
B(t)=(1-t)2P0+2t(1-t)P1+t2P2,t∈[0,1];
其中:P0為起始點,P1為控制點,P2為終止點,t為補償系數(shù),一般取0.2。
(3)輪廓線點為FT_CURVE_TAG_CUBIC:將該控制點作為第一個控制點,計算并更新起始點和終止點,分為以下幾種情況:若該控制點已經(jīng)是輪廓線的第一個點,則起始點為輪廓線的最后一個點,否則為錨點集的上一個點;若該控制點為輪廓線倒數(shù)第二個點,第二個控制點為最后一個點,終止點為錨點集第一個點,否則為輪廓線下一個點;其他情況皆無效。
本研究進行3次貝塞爾曲線插值;3次貝塞爾曲線插值公式為:
B(t)=(1-t)3P0+3t(1-t)2P1+3(1-t)t2P2+(1-t)3P3,t∈[0,1];
其中:P0為起始點,P1為控制點1,P2為控制點2,P3為終止點,t為補償系數(shù),一般取0.2。
第17期2023年9月無線互聯(lián)科技·研究創(chuàng)新No.17September,2023
第17期2023年9月無線互聯(lián)科技·研究創(chuàng)新No.17September,2023
1.3 顯示矢量漢字
循環(huán)逐個分析漢字串的每一個漢字,將漢字轉(zhuǎn)為相應(yīng)的Unicode編碼值。在矢量字體的字形索引庫中進行索引查找,獲得字形輪廓數(shù)據(jù)集。根據(jù)實際縮放或旋轉(zhuǎn)需要,對漢字輪廓數(shù)據(jù)集進行相應(yīng)的旋轉(zhuǎn)、縮放等變換,然后遍歷輪廓數(shù)據(jù)集中的每條封閉的輪廓線,對輪廓線的起始點、終止點、控制點進行不同的處理,進行貝塞爾一次/二次/三次插值補償。對補償后的輪廓線進行柵格化處理[3],將可能存在的凹邊形分解為多個凸邊形,直至遍歷完所有的輪廓數(shù)據(jù)集,最后調(diào)用GDI或 OpenGL等圖形接口將已柵格化的數(shù)據(jù)進行渲染[4-5],完成漢字的顯示,詳細處理流程如圖3所示。
2 實例分析
2.1 測試環(huán)境
采用定制設(shè)計的顯示處理板進行測試驗證。其中,CPU為ARM Cortex-M4嵌入式處理器,顯示設(shè)備為10寸觸摸控制屏。
2.2 測試結(jié)果
2.2.1 漢字輪廓顯示
以漢字“航”為例,分別以宋體和黑體且貝塞爾插值系數(shù)t取1.0、0.5和0.2按本方法進行測試驗證,測試驗證結(jié)果如圖4所示。
其中黑色線、藍色線和紅色線分別描述了漢字輪廓線中線段和二/三次貝塞爾曲線分布及插值情況,分析可見,貝塞爾插值系數(shù)取1.0和0.5時,漢字輪廓過渡不平滑,顯示效果差。貝塞爾插值系數(shù)取0.2時,漢字輪廓平滑,顯示效果滿足要求,而如果取值更小時,平滑效果改良不明顯,計算量反而大幅增加。
2.2.2 縮放及旋轉(zhuǎn)顯示
按本方法對漢字“航”宋體正常顯示(字號20,t=0.2)進行縮放及旋轉(zhuǎn)測試,縮放及旋轉(zhuǎn)測試結(jié)果如圖5所示。
分析可見,本方法通過貝塞爾曲線的矢量數(shù)據(jù)變換,完成漢字的顯示、旋轉(zhuǎn)和縮放,其顯示效果不會發(fā)生任何模糊和失真。
2.2.3 傳統(tǒng)顯示漢字與本方法顯示漢字對比
使用ARM Cortex-M4圖形接口進行渲染后的漢字效果如圖6所示。
分析可見,傳統(tǒng)方法對漢字進行旋轉(zhuǎn)和縮放必然模糊失真,如進一步縮放,效果將完全模糊根本不可辨認;而本方法對漢字進行任意旋轉(zhuǎn)、縮放均能保持良好、平滑的顯示效果。
3 結(jié)語
嵌入式系統(tǒng)由于資源有限,一般只支持點陣漢字,不支持矢量漢字,本文提出了一種基于貝塞爾曲線的矢量漢字顯示方法。該方法首先分析了矢量漢字的顯示原理,在矢量字體文件中通過漢字編碼值獲取輪廓線,然后基于貝塞爾曲線進行插值補償,插值補償系數(shù)根據(jù)插值計算量和顯示效果綜合權(quán)衡取值,最后在基于ARM Cortex-M4嵌入式處理器的顯示處理板上進行了測試驗證。結(jié)果表明,該方法能夠?qū)崿F(xiàn)包括宋體、黑體等各種字體和字號的高質(zhì)量顯示,無需反復(fù)生成字庫文件;對漢字進行任意次旋轉(zhuǎn)、縮放變換后,漢字顯示效果不失真、不模糊,滿足了綜合模塊化航電架構(gòu)下大屏觸摸控制的顯示要求,該矢量漢字顯示方法不僅適用于STM32、ARM等嵌入式裸機系統(tǒng),同樣適用于VxWorks、FreeRTOS、QNX、uClinux等主流嵌入式操作系統(tǒng)。
參考文獻
[1]凌云鋒.VxWorks5.5平臺下矢量字體顯示的實現(xiàn)[J].計算機系統(tǒng)應(yīng)用,2011(7):203-206.
[2]楊軍祥,楊濤,李成文,等.綜合模塊化航空電子核心系統(tǒng)技術(shù)研究[J].航空計算技術(shù),2017(3):106-110.
[3]陳振杰,周琛,李飛雪,等.矢量多邊形柵格化算法快速并行化方法研究[J].遙感信息,2014(5):3-8.
[4]王汐,蔣林,張敏.GDI函數(shù)硬件加速器設(shè)計與實現(xiàn)[J].微電子學(xué)與計算機,2014(5):44-47.
[5]侯冬曼,陳武喝,馬佳洪.基于OpenGL的虛擬仿真實驗設(shè)計[J].實驗室研究與探索,2019(6):89-92.
Vector Chinese character display technology in embedded system
ZhangXiaoming
(AVIC Xi’an Aircraft Insdustry Group Co., Ltd., Xi’an 710089, China)
Abstract:The display of Chinese characters in embedded system has always been a difficult point in software development. Because it generally only supports dot matrix Chinese characters and vector Chinese characters, it can no longer meet the requirements of large-screen display and touch control under the integrated modular avionics architecture. In this paper, the principle of displaying vector Chinese characters based on Bezier curve is analyzed, and the interpolation compensation coefficient is comprehensively compared and selected. Combined with specific examples, the results show that this method can realize high-quality display of various fonts and font sizes, including Song Ti and Bold, and the display effect is not distorted after Chinese characters are rotated and scaled, which meets the display requirements of Chinese characters in large-screen touch mode.
Key words: embedded system; dot matrix Chinese characters; vector Chinese characters; bessel curve; Chinese character outline