摘要:嵌入式系統(tǒng)下的漢字顯示一直是軟件開發(fā)的難點(diǎn),由于一般只支持點(diǎn)陣漢字,并支持矢量漢字,已經(jīng)不能滿足綜合模塊化航電架構(gòu)下大屏顯示和觸摸控制的要求。文章通過分析基于貝塞爾曲線顯示矢量漢字的原理,綜合比較選擇插值補(bǔ)償系數(shù),結(jié)合具體實(shí)例進(jìn)行了測(cè)試驗(yàn)證。結(jié)果表明,采用該方法能夠?qū)崿F(xiàn)包括宋體、黑體等各種字體和字號(hào)的高質(zhì)量顯示,對(duì)漢字旋轉(zhuǎn)、縮放變換后顯示效果不失真,滿足了大屏觸控模式下對(duì)漢字縮放的顯示要求。
關(guān)鍵詞:嵌入式系統(tǒng);點(diǎn)陣漢字;矢量漢字;貝塞爾曲線;漢字輪廓
中圖分類號(hào):TP311.5文獻(xiàn)標(biāo)志碼:A
0 引言
嵌入式系統(tǒng)由于資源有限,大多只支持點(diǎn)陣漢字,不支持矢量漢字 [1]。點(diǎn)陣字庫采用.c文件方式儲(chǔ)存信息,每個(gè)字信息都包含在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,其中包含了字體的所有點(diǎn)信息,字體顯示時(shí)根據(jù)寬高將點(diǎn)信息直接送入顯存顯示。這種方式的字體實(shí)現(xiàn)簡(jiǎn)單、顯示速度快。
隨著綜合模塊化航電(Integrated Modular Av-ionics,IMA)架構(gòu)的發(fā)展[2],大屏顯示和觸摸控制已成為主流,不僅要求畫面中漢字能清晰顯示,更提出了自由旋轉(zhuǎn)和縮放的新要求。目前,傳統(tǒng)的基于點(diǎn)陣漢字的實(shí)現(xiàn)方法存在一些局限性,點(diǎn)陣漢字每種字體和字號(hào)均需對(duì)應(yīng)的字庫文件,如顯示宋體(16×16、24×24、32×32)、黑體(16×16、24×24、32×32)就需要6個(gè)不同的字庫文件,維護(hù)管理十分麻煩;點(diǎn)陣漢字顯示畫面進(jìn)行旋轉(zhuǎn)和縮放變換時(shí),漢字產(chǎn)生模糊失真,效果不佳。為適應(yīng)大屏觸摸控制下對(duì)漢字的顯示要求,本文摒棄了傳統(tǒng)的基于點(diǎn)陣的漢字顯示方式,提出一種基于貝塞爾曲線的矢量漢字顯示方法。
1 貝塞爾曲線顯示漢字原理
1.1 獲取漢字輪廓
矢量字體中的每一個(gè)字形是通過數(shù)學(xué)曲線來描述的,它包含了字形邊界上的關(guān)鍵點(diǎn),連續(xù)的導(dǎo)數(shù)信息等,矢量字體主要包括Type1、TrueType、OpenType和CFF等格式,采用幾何學(xué)中的二次/三次貝塞爾樣條曲線及直線來描述字體的外形輪廓。由于每個(gè)字符的輪廓信息是根據(jù)字形索引來存放的,而字形索引又通過字符的Unicode編碼來獲取,所以首先需要先設(shè)置字符的編碼格式,假如某些嵌入式系統(tǒng)的默認(rèn)的字符編碼是GBK,因此還需要將GBK轉(zhuǎn)換為Unicode,然后通過Unicode編碼值來獲取字形索引,最后就可以在字庫文件中得到字符的輪廓數(shù)據(jù)。
1.2 漢字輪廓分析
漢字輪廓的貝塞爾曲線由起始點(diǎn)、終止點(diǎn)和控制點(diǎn)組成,描述如下:
(1)FT_CURVE_TAG_ON:點(diǎn)在貝塞爾曲線上,為起始點(diǎn)或終止點(diǎn),其他的點(diǎn)為OFF點(diǎn),表明該點(diǎn)不在貝塞爾曲線上,為貝塞爾曲線的控制點(diǎn)。
(2)FT_CURVE_TAG_CONIC:二次貝塞爾曲線控制點(diǎn),一條二次貝塞爾曲線由一個(gè)起始點(diǎn)、一個(gè)終止點(diǎn)和一個(gè)控制點(diǎn)確定,如圖1所示。
(3)FT_CURVE_TAG_CUBIC:三次貝塞爾曲線控制點(diǎn),一條三次貝塞爾曲線由一個(gè)起始點(diǎn)、一個(gè)終止點(diǎn)和兩個(gè)控制點(diǎn)確定,如圖2所示。
漢字輪廓的貝塞爾曲線插值補(bǔ)償按以下3種情況進(jìn)行處理。
(1)輪廓線的點(diǎn)為FT_CURVE_TAG_ON,僅將該點(diǎn)記錄至錨點(diǎn)集,相當(dāng)于一次貝塞爾曲線(即線段),不用作插值處理。
(2)輪廓線的點(diǎn)為FT_CURVE_TAG_CONIC:計(jì)算并更新起始點(diǎn)和終止點(diǎn),分為以下兩種情況:若該控制點(diǎn)已經(jīng)是輪廓線的第一個(gè)點(diǎn),則起始點(diǎn)為輪廓線的最后一個(gè)點(diǎn),否則為錨點(diǎn)集的上一個(gè)點(diǎn)。若該控制點(diǎn)為輪廓線的最后一個(gè)點(diǎn),則終止點(diǎn)為錨點(diǎn)集第一個(gè)點(diǎn),否則為輪廓線下一個(gè)點(diǎn)。
進(jìn)行二次貝塞爾曲線插值,分為以下兩種情況:若輪廓線下一個(gè)點(diǎn)為FT_CURVE_TAG_ON,起始點(diǎn)和終止點(diǎn)按(1)條處理,然后進(jìn)行二次貝塞爾插值補(bǔ)償;若輪廓線下一個(gè)點(diǎn)仍為FT_CURVE_TAG_CONIC,則終止點(diǎn)為該2個(gè)控制點(diǎn)的中值,然后進(jìn)行二次貝塞爾曲線插值補(bǔ)償。
二次貝塞爾曲線插值公式為:
B(t)=(1-t)2P0+2t(1-t)P1+t2P2,t∈[0,1];
其中:P0為起始點(diǎn),P1為控制點(diǎn),P2為終止點(diǎn),t為補(bǔ)償系數(shù),一般取0.2。
(3)輪廓線點(diǎn)為FT_CURVE_TAG_CUBIC:將該控制點(diǎn)作為第一個(gè)控制點(diǎn),計(jì)算并更新起始點(diǎn)和終止點(diǎn),分為以下幾種情況:若該控制點(diǎn)已經(jīng)是輪廓線的第一個(gè)點(diǎn),則起始點(diǎn)為輪廓線的最后一個(gè)點(diǎn),否則為錨點(diǎn)集的上一個(gè)點(diǎn);若該控制點(diǎn)為輪廓線倒數(shù)第二個(gè)點(diǎn),第二個(gè)控制點(diǎn)為最后一個(gè)點(diǎn),終止點(diǎn)為錨點(diǎn)集第一個(gè)點(diǎn),否則為輪廓線下一個(gè)點(diǎn);其他情況皆無效。
本研究進(jìn)行3次貝塞爾曲線插值;3次貝塞爾曲線插值公式為:
B(t)=(1-t)3P0+3t(1-t)2P1+3(1-t)t2P2+(1-t)3P3,t∈[0,1];
其中:P0為起始點(diǎn),P1為控制點(diǎn)1,P2為控制點(diǎn)2,P3為終止點(diǎn),t為補(bǔ)償系數(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)逐個(gè)分析漢字串的每一個(gè)漢字,將漢字轉(zhuǎn)為相應(yīng)的Unicode編碼值。在矢量字體的字形索引庫中進(jìn)行索引查找,獲得字形輪廓數(shù)據(jù)集。根據(jù)實(shí)際縮放或旋轉(zhuǎn)需要,對(duì)漢字輪廓數(shù)據(jù)集進(jìn)行相應(yīng)的旋轉(zhuǎn)、縮放等變換,然后遍歷輪廓數(shù)據(jù)集中的每條封閉的輪廓線,對(duì)輪廓線的起始點(diǎn)、終止點(diǎn)、控制點(diǎn)進(jìn)行不同的處理,進(jìn)行貝塞爾一次/二次/三次插值補(bǔ)償。對(duì)補(bǔ)償后的輪廓線進(jìn)行柵格化處理[3],將可能存在的凹邊形分解為多個(gè)凸邊形,直至遍歷完所有的輪廓數(shù)據(jù)集,最后調(diào)用GDI或 OpenGL等圖形接口將已柵格化的數(shù)據(jù)進(jìn)行渲染[4-5],完成漢字的顯示,詳細(xì)處理流程如圖3所示。
2 實(shí)例分析
2.1 測(cè)試環(huán)境
采用定制設(shè)計(jì)的顯示處理板進(jìn)行測(cè)試驗(yàn)證。其中,CPU為ARM Cortex-M4嵌入式處理器,顯示設(shè)備為10寸觸摸控制屏。
2.2 測(cè)試結(jié)果
2.2.1 漢字輪廓顯示
以漢字“航”為例,分別以宋體和黑體且貝塞爾插值系數(shù)t取1.0、0.5和0.2按本方法進(jìn)行測(cè)試驗(yàn)證,測(cè)試驗(yàn)證結(jié)果如圖4所示。
其中黑色線、藍(lán)色線和紅色線分別描述了漢字輪廓線中線段和二/三次貝塞爾曲線分布及插值情況,分析可見,貝塞爾插值系數(shù)取1.0和0.5時(shí),漢字輪廓過渡不平滑,顯示效果差。貝塞爾插值系數(shù)取0.2時(shí),漢字輪廓平滑,顯示效果滿足要求,而如果取值更小時(shí),平滑效果改良不明顯,計(jì)算量反而大幅增加。
2.2.2 縮放及旋轉(zhuǎn)顯示
按本方法對(duì)漢字“航”宋體正常顯示(字號(hào)20,t=0.2)進(jìn)行縮放及旋轉(zhuǎn)測(cè)試,縮放及旋轉(zhuǎn)測(cè)試結(jié)果如圖5所示。
分析可見,本方法通過貝塞爾曲線的矢量數(shù)據(jù)變換,完成漢字的顯示、旋轉(zhuǎn)和縮放,其顯示效果不會(huì)發(fā)生任何模糊和失真。
2.2.3 傳統(tǒng)顯示漢字與本方法顯示漢字對(duì)比
使用ARM Cortex-M4圖形接口進(jìn)行渲染后的漢字效果如圖6所示。
分析可見,傳統(tǒng)方法對(duì)漢字進(jìn)行旋轉(zhuǎn)和縮放必然模糊失真,如進(jìn)一步縮放,效果將完全模糊根本不可辨認(rèn);而本方法對(duì)漢字進(jìn)行任意旋轉(zhuǎn)、縮放均能保持良好、平滑的顯示效果。
3 結(jié)語
嵌入式系統(tǒng)由于資源有限,一般只支持點(diǎn)陣漢字,不支持矢量漢字,本文提出了一種基于貝塞爾曲線的矢量漢字顯示方法。該方法首先分析了矢量漢字的顯示原理,在矢量字體文件中通過漢字編碼值獲取輪廓線,然后基于貝塞爾曲線進(jìn)行插值補(bǔ)償,插值補(bǔ)償系數(shù)根據(jù)插值計(jì)算量和顯示效果綜合權(quán)衡取值,最后在基于ARM Cortex-M4嵌入式處理器的顯示處理板上進(jìn)行了測(cè)試驗(yàn)證。結(jié)果表明,該方法能夠?qū)崿F(xiàn)包括宋體、黑體等各種字體和字號(hào)的高質(zhì)量顯示,無需反復(fù)生成字庫文件;對(duì)漢字進(jìn)行任意次旋轉(zhuǎn)、縮放變換后,漢字顯示效果不失真、不模糊,滿足了綜合模塊化航電架構(gòu)下大屏觸摸控制的顯示要求,該矢量漢字顯示方法不僅適用于STM32、ARM等嵌入式裸機(jī)系統(tǒng),同樣適用于VxWorks、FreeRTOS、QNX、uClinux等主流嵌入式操作系統(tǒng)。
參考文獻(xiàn)
[1]凌云鋒.VxWorks5.5平臺(tái)下矢量字體顯示的實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011(7):203-206.
[2]楊軍祥,楊濤,李成文,等.綜合模塊化航空電子核心系統(tǒng)技術(shù)研究[J].航空計(jì)算技術(shù),2017(3):106-110.
[3]陳振杰,周琛,李飛雪,等.矢量多邊形柵格化算法快速并行化方法研究[J].遙感信息,2014(5):3-8.
[4]王汐,蔣林,張敏.GDI函數(shù)硬件加速器設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2014(5):44-47.
[5]侯冬曼,陳武喝,馬佳洪.基于OpenGL的虛擬仿真實(shí)驗(yàn)設(shè)計(jì)[J].實(shí)驗(yàn)室研究與探索,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