黃秀珍,何加銘,邰曉英
(寧波大學(xué)通信技術(shù)研究所,浙江寧波3152118)
短信作為一種使用方便、費(fèi)用低廉的即時(shí)通信方式,在眾多通信手段中脫穎而出,得到越來越多的應(yīng)用。在嵌入式系統(tǒng)中,比如手機(jī),用戶通過手機(jī)的短信模塊可以方便地收發(fā)短信,類似的一些由單片機(jī)或者嵌入式MCU為核心構(gòu)建的嵌入式系統(tǒng)中也設(shè)置了短信模塊。隨著短信的廣泛應(yīng)用,用戶不再滿足于顏色單一的點(diǎn)陣漢字,而是希望使用有漸變效果的矢量字體的彩色顯示,并且短信的顏色允許發(fā)送人來設(shè)置,即收信人的短信能夠顯示出發(fā)信人所設(shè)置的字體顏色、大小、形狀等格式的短信內(nèi)容。但是,目前處理能力較低、存儲(chǔ)較小的嵌入式系統(tǒng)受制于其低處理及低存儲(chǔ)能力,無法實(shí)現(xiàn)有漸變效果的矢量字體的彩色顯示[1]。為了克服以上現(xiàn)有技術(shù)的缺點(diǎn),本文提出了一種嵌入式矢量字體變色處理方法,該方法能夠在低處理能力以及低存儲(chǔ)能力的嵌入式系統(tǒng)中實(shí)現(xiàn)彩色短信的收發(fā)和顯示[2]。
本文提出的嵌入式矢量字體變色處理方法,具體過程如下。短信收發(fā)雙方使用相同的短信編碼方式,在用戶寫短信時(shí),該用戶系統(tǒng)將短信的顏色信息加入到短信的編碼信息中,然后將編碼信息發(fā)送給對方系統(tǒng),對方系統(tǒng)接收到上述編碼信息后,解析得到相應(yīng)的顏色信息和短信內(nèi)容,再執(zhí)行矢量字體的變色處理流程來處理短信內(nèi)容中的所有字符。
具有顏色信息的短信的傳遞過程如圖1所示。首先,短信發(fā)送方在編寫短信時(shí)設(shè)置了短信的顏色,發(fā)送時(shí)發(fā)送方會(huì)將短信內(nèi)容和設(shè)置的顏色信息轉(zhuǎn)化為待發(fā)送編碼。短信編碼信息的內(nèi)容包括:服務(wù)中心號碼、收信人手機(jī)號碼和短信內(nèi)容等。在發(fā)送方發(fā)送短信時(shí),短信編碼中的前三位對應(yīng)字體顏色。
短信經(jīng)過短信服務(wù)中心到達(dá)接收方時(shí),接收方對短信編碼信息解碼,根據(jù)短信內(nèi)容的前三位,得到相應(yīng)的顏色設(shè)置,其余部分則為短信內(nèi)容的文本信息。接收方對當(dāng)前短信顏色進(jìn)行處理。本方法的短信顏色信息傳遞過程,不改變短信編碼中的其它內(nèi)容和短信的傳輸編碼方式,只在短信內(nèi)容的前幾位中加入了顏色設(shè)置信息,不會(huì)影響短信編碼在信息中心的傳遞。
圖1 具有顏色信息的短信傳遞過程
矢量字體的變色處理的主要流程如圖2所示。當(dāng)用戶要顯示短信中的字符時(shí),嵌入式系統(tǒng)首先獲得該字符的編碼,如果不是Unicode編碼,則做編碼轉(zhuǎn)換,再調(diào)用字體引擎得到該字符每個(gè)點(diǎn)的相應(yīng)的256級灰度信息,即濃度信息,把它存入數(shù)組中。
圖2 矢量字體的變色處理主要流程
根據(jù)短信字符的顏色信息,在嵌入式系統(tǒng)的字體顯示模塊中對所得的的濃度信息做以下處理。當(dāng)用戶不需要改變顏色時(shí),將得的每個(gè)點(diǎn)的灰度值直接設(shè)為其紅綠藍(lán)3個(gè)分量的值即可。如果用戶需要改變顏色,就需要根據(jù)設(shè)置的字體顏色和灰度信息將每個(gè)點(diǎn)的數(shù)據(jù)轉(zhuǎn)換為彩色信息。對字符的輪廓的不同點(diǎn)的信息要進(jìn)行不同的處理。輪廓主干上的點(diǎn),濃度值最接近最大值255,基本描述了整個(gè)輪廓的核心,將這些點(diǎn)其顏色設(shè)置為用戶設(shè)置的字體顏色。字符的輪廓邊緣的點(diǎn),其濃度值在主干點(diǎn)濃度值和零之間,與主干上的點(diǎn)顏色有一種過渡效果。取得所有邊緣點(diǎn),根據(jù)字體顏色和這些點(diǎn)的濃度信息運(yùn)用顏色漸變算法,得到顏色信息。
一般嵌入式系統(tǒng)中使用的是點(diǎn)陣字體解碼器,當(dāng)需要顯示矢量字體時(shí),需修改其內(nèi)在解碼機(jī)制以適應(yīng)顯示。若系統(tǒng)中有矢量字體解碼器,直接顯示進(jìn)行顏色處理后的字符。
在實(shí)際運(yùn)用中,可以利用多種顏色漸變算法,如線性內(nèi)插法、線性倒插法、余弦插值法[3]。線性內(nèi)插法是最常見的顏色漸變方法,線性倒插法是一種顏色有鮮明對比的顏色漸變方法,余弦插值法得出的漸變效果具有非常好的平滑效果。
設(shè)起始顏色為F,終止顏色為E,需要通過算法求取從F到E的所有中間位置P的漸變顏色M。為此,首先將F和E在RGB空間分解為紅綠藍(lán)分量,分別設(shè)為FR、FG、FB、ER、EG和EB。設(shè)漸變顏色M 的紅綠藍(lán)分量分別為MR、MG、MB。將從F到E的實(shí)際需要表達(dá)的屏幕像素長度歸一化為1,則所有中間位置P∈[0,1],可見P為浮點(diǎn)數(shù)。
(1)線性內(nèi)插法(Linear interpolation),各個(gè)紅綠藍(lán)分量的算法為:
(2)線性倒插法(Reverse linear interpolation),各個(gè)紅綠藍(lán)分量的算法為:
(3)余弦插值法(Cosine interpolation),各個(gè)紅綠藍(lán)分量的算法為:
以上漸變顏色算法實(shí)際應(yīng)用中最為常用的算法。
在漸變顏色處理中,根據(jù)設(shè)置顏色和這些點(diǎn)的濃度信息運(yùn)用我們的顏色漸變算法得到輪廓邊緣上點(diǎn)的顏色信息[4]。有起始顏色和濃度信息,沒有設(shè)定終止顏色。每個(gè)顏色分量小于255,因此所得顏色為在起始顏色和255之間的一個(gè)值。根據(jù)其接近255的值的程度(通過濃度信息判斷),而給出一種設(shè)置方法。設(shè)置顏色為S,濃度信息為P,p∈[0,255],結(jié)果色為D。S和D的紅綠藍(lán)3個(gè)分量分別為SR、SG、SB,DR、DG、DB。則優(yōu)化改進(jìn)后的顏色漸變算法公式為:
首先,在MTK模擬器上測試。運(yùn)行環(huán)境為:PC機(jī)CPU(2.17GHz),內(nèi)存1GB,軟件平臺VC6.0。在模擬器上,字體顯示效果如圖3所示。
圖3 彩色漸變顯示效果圖
圖3 為彩色漸變顯示效果,圖3中每個(gè)字符都具有邊緣漸變效果。且為24位彩色抗鋸齒顯示。字符顯示時(shí),未有延遲現(xiàn)象。在真機(jī)上測試時(shí),可以實(shí)現(xiàn)短信雙方字體顏色的傳遞。
本文提出的嵌入式矢量字體變色處理方法,能夠?qū)崿F(xiàn)在低處理能力以及低存儲(chǔ)能力的嵌入式系統(tǒng)中彩色短信的收發(fā)和顯示,且不影響短信在信息中心的傳遞。同時(shí),在彩色矢量字體漸變顯示時(shí),改進(jìn)后的顏色漸變算法,實(shí)現(xiàn)了彩色漸變矢量字體的24位無鋸齒顯示。在MTK平臺測試,字體顯示沒有延遲,且具有邊緣漸變效果。下一步,可將此變色處理方法應(yīng)用于其它嵌入式平臺短信傳輸和處理中。
[1]高園園,高明煜,曾毓.基于SDL庫的嵌入式平臺中文顯示技術(shù)研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2009,18(4):194-197.
[2]楊子華,胡倩.基于智能手機(jī)平臺的MMS系統(tǒng)研究與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,23(3):25-27.
[3]李宋,吳文權(quán),詹詠.顏色漸變的算法研究[J].上海理工大學(xué)學(xué)報(bào),2004,26(3):224-228.
[4]李志永,滕升華,杜坤,等.基于不平度顏色混合的圖像彩色化方法[J].電子與信息學(xué)報(bào),2008,30(3):514-517.
[5]孫曉輝,陳曉,王春,等.在嵌入式瀏覽器中使用TrueType矢量字庫[J].電視技術(shù),2007,31(8):120-122.