999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于嵌入式平臺的小型字庫設計

2008-12-31 00:00:00
電腦知識與技術 2008年34期

摘要:開發(fā)適用于嵌入式設備的小型字庫系統(tǒng),介紹了字庫系統(tǒng)的設計原則及各字庫的編碼和顯示原理,系統(tǒng)已成功應用于一款有線數(shù)字電視接收機。

關鍵詞:點陣字庫;矢量字庫;嵌入式設備;查表法;地址映射

中圖分類號:TP334文獻標識碼:A文章編號:1009-3044(2008)34-1683-02

Designed of Small Font Based on Embedded Platform

CHEN Hui

(Zhongshan Institute, University of Electronic Science and Technology, Zhongshan 528402, china)

Abstract: This paper develops small font system for embedded devices, introduced the character of the system design principles and character encoding and display principles, the system has been success-fully applied to a cable digital TV receiver.

Key words: dot-matrix font; vector font; embedded devices; look-up table method; address mapping

1 引言

文本顯示是用戶界面最基本的功能,為了增加界面的靈活性和美感,就需要有較為完備的字庫系統(tǒng)的支持。由于嵌入式設備的硬件條件不如PC機,因此我們不可能應用現(xiàn)在較為流行的TTF字庫。由于點陣字庫比較小,嵌入式設備目前主要使用點陣字庫,但點陣字庫不便于設計縮放、旋轉等,因此,小型矢量字庫已應用于很多嵌入式設備。本字庫系統(tǒng)就是結合使用了點陣字庫和矢量字庫。

2 字庫簡介

點陣字庫是把每一個字符定義成矩陣,點陣中的每個點只有一種狀態(tài),有筆畫或無筆畫[1]。然后用每個點的虛實來表示漢字的輪廓,對應于二進制數(shù)字1表示有筆畫,對應于此位的象素應置為字符顏色,0表示沒有筆畫,對應于此位的象素應置為背景顏色或不改變。

矢量字庫是基于漢字筆劃存儲的,每筆漢字邊緣用封閉多邊形描述,存儲時只需保存多邊形各頂點坐標即可,但為了節(jié)省存儲空間,采用壓縮存儲方式,每筆先給一個起點坐標(x0,y0),其余頂點采用相對于(x0,y0)的偏移量(△x,△y)表示,用(x0+△x,y0+△y)獲取其實際坐標。

3 字庫設計與實現(xiàn)

結合嵌入式設備存儲空間的限制,我們選用了ucdos3.x部分矢量字庫,TurboC2.0的西文矢量字庫和16、24點陣字庫。ucdos3.x矢量字庫及Turbo的西文矢量字庫存儲方法簡單,解碼算法容易,占用極少的存儲空間,容易實現(xiàn)字型的變換。16、24點陣字庫占用存儲空間少,顯示速度相對于矢量字庫較快,但不容易進行變換。由于16、24點陣字庫是用戶界面較為常用的字體,結合使用這兩種字庫,即可以滿足存儲空間的要求,又能加快文本的顯示速度。下面將具體介紹兩種字庫的結構和顯示原理。

3.1 廣泛漢字矢量字庫的編碼與顯示

在ucdos3.x矢量字庫中,每個漢字的矢量數(shù)據(jù)都由一指針指向,指針區(qū)在每個漢字字庫的開頭0xBB3E字節(jié)。每個漢字矢量數(shù)據(jù)指針占6個字節(jié),前4個字節(jié)為漢字的矢量數(shù)據(jù)在文件中的偏移量,后兩個字節(jié)為漢字矢量數(shù)據(jù)的長度。矢量數(shù)據(jù)格式為:控制碼+坐標值。共有十種控制碼:1)若控制碼第7,6位為11,清除碼,結束當前筆劃,在第一個坐標與當前坐標之間建立連線;建立新筆劃(x,y),各占7位,從控制碼的第5位開始,即11XXXXXXXYYYYYYY;2)

若控制碼的高4位小于等于0x40,控制碼低4位表示坐標值的個數(shù)(即有多少個坐標值),每個坐標占一個字節(jié),(x,y)各占4位,各自的最高位為符號位,即FXXXFYYY;3)若控制碼的高4位等于4,控制碼低4位表示坐標值的個數(shù)(即有多少個坐標值),每個坐標占一個字節(jié),(x,y)各占4位,X,Y均為正,即+XXXX+YYYY;4)若控制碼的高4位等于5,控制碼低4位表示坐標值的個數(shù),每個坐標占一個字節(jié),(x,y)各占4位,X為負,Y為正,即-XXXX+YYYY;5)若控制碼的高4位等于6,控制碼低4位表示坐標值的個數(shù),每個坐標占一個字節(jié),(x,y)各占4位,X,Y均為正,即-XXXX+YYYY;6)若控制碼的高4位等于7,控制碼低4位表示坐標值的個數(shù),每個坐標占一個字節(jié),(x,y)各占4位,X為正,Y為負,即+XXXX-YYYY;7)若控制碼等于0x80,其后1字節(jié)為Y坐標值,最高位為符號位,X坐標不變,即10000000FXXXXXXX;8)若控制碼等于0x90,其后1字節(jié)為Y坐標值,最高位為符號位,X坐標不變,即10010000FXXXXXXX;9) 若控制碼的高4位等于8,控制碼低4位為X坐標值,最高位為符號位,其后一字節(jié)為Y坐標,最高位為符號位,即1000FXXXFYYYYYYY;10)若控制碼的高4位等于9,控制碼低4位為Y坐標值,最高位為符號位,其后一字節(jié)為X坐標,最高位為符號位,即1001FYYYFXXXXXXX。

要顯示ucdos3.x矢量字體,我們首先要找到漢字指針在指針區(qū)的偏移,由下面的公式搜索漢字當前位置:pos=((qu-16)*94+wei-1)*6,變量qu、wei對應于漢字的區(qū)、位碼。找到漢字在字庫中的位置,就要對存儲的坐標進行解碼,依據(jù)ucdos3.x矢量字體的數(shù)據(jù)格式,使用switch語句可以很方便的獲得字體筆劃,最后只需要使用GDI系統(tǒng)中的LineTo()函數(shù)建立坐標連線。

3.2 西文矢量字庫的編碼與顯示

系統(tǒng)提供了litt.chr、goth.chr、sans.chr、trip.chr4個西文矢量字庫,矢量字庫由說明、索引、數(shù)據(jù)三部分組成,首先我們依據(jù)(字符ASCII碼值-32)*2+144找到索引項首地址,根據(jù)索引項找到字符的相對偏移地址(即矢量數(shù)據(jù)的存儲位置)和字符數(shù)據(jù)結束標志,pos=索引項高字節(jié)+索引項低字節(jié)*256。矢量數(shù)據(jù)為各點的橫,縱坐標,頭兩個字節(jié)為起始點坐標,后依次為各點坐標。字庫中讀取的x坐標需減去128以獲得真實坐標,縱坐標則有5中情況:1)若坐標值小于32,為真實坐標,且為畫線的起點;2)若縱坐標值大于等于32小于128,取值空缺;3)若縱坐標值大于等于128小于160,為筆畫中間點,當下一Y小于32時,為某筆畫終點,需減去128獲得真實坐標;4)若縱坐標值大于等于160,減去256獲取真實縱坐標值;5)當Y=0,且X值等于結束標志符加128時,表示字符的數(shù)據(jù)結束[2]。同理,利用GDI系統(tǒng)中的LineTo()函數(shù)連接實際的坐標值,至此,完成了嵌入式設備下矢量字庫的建立和顯示。

本文以西文矢量字庫為例,講述了矢量字庫的顯示,見圖1,ucdos矢量字庫顯示與上類同,只是解碼算法不同,索引部分包含數(shù)據(jù)長度而不是結束標志,結合已知的編碼算法,可以很容易的完成顯示,這里不再贅述。

3.3 矢量字庫的縮放設計

由于矢量字庫存放是字體筆劃坐標,因此,我們只需要對解碼的坐標值進行平移、縮放和旋轉即可實現(xiàn)字體的變形,其換算公式如下:

x=x*xf; // xf為x方向縮放因子 (1)

y=y*yf; // yf為y方向縮放因子 (2)

x1=x0+x*cos(a)-ysin(a); // x0平移因子,a旋轉角度 (3)

y1=y0+x*sin(a)+y*cos(a);//y0平移因子,a旋轉角度 (4)

換算公式中涉及到了正弦和余弦計算,而作者所在的嵌入式環(huán)境不支持這類運算,因此需要作者自己編寫這類函數(shù),考慮到嵌入式設備不似PC機有專門的浮點運算器,為了提高顯示速度,作者采用了查表法設計這類函數(shù)。

3.4 點陣字庫的顯示

點陣字庫的顯示則比較簡單,我們首先也需要找到字體在字庫中的位置,pos=((qu-1)*94+(wei-1))*fontsize*fontsize/16,fontsize即為點陣字體的尺寸(16或24),找到字體的位置,我們只需要按位讀取像素,通過掩碼0x80判斷象素為 1的位,調用GDI系統(tǒng)中的SetPixel()函數(shù)在屏幕的對應位置設置像素值即可。

4 應用實例

建立的小型字庫已成功應用于LSI方案的有線電視接收機中,從PC機獲得的字庫文件直接下載到存放字庫文件的8MROM芯片中[3],矢量字庫文件不進行解碼,完成地址映射到邏輯地址的映射后,根據(jù)矢量字庫的編碼算法,將矢量字庫文件進行解碼顯示,由于解碼算法簡單,顯示速度很快也節(jié)省了內存,點陣字庫只需要直接讀取位圖信息進行顯示即可。字庫具備擴展功能,例如衛(wèi)星電視接收機接收港臺電視信號,需要支持繁體字,我們可以利用相同的方法建立繁體字庫文件。下載繁體字庫文件于ROM芯片,完成物理地址到的邏輯映射,由于BIG5碼與GB碼在漢字編碼存在共用位段,進行碼間識別轉換后才能解碼顯示。

5 結語

從上述字庫的建立過程可以看到,作者設計的字庫系統(tǒng)非常小,矢量字庫文件是以解碼前的文件存儲的,并且選用的小點陣字庫。矢量字庫的解碼算法中,為了提高顯示速度,作者避免了一些復雜的浮點運算。系統(tǒng)字體豐富,容易實現(xiàn)字體的各種變換,能滿足用戶界面的需求。不過由于本設計只是對傳統(tǒng)字庫的組合設計,字庫文件有不同的編碼方式,底層的字體顯示函數(shù)需要單獨的代碼,代碼需經過多次封裝,難免存在一些不足。

參考文獻:

[1] 畢曉君,韓仲年.漢字字形及漢字庫存儲技術研究[J].自動化技術與應用,2007,26(12):95-98.

[2] 黃健青,王平.Turbo C矢量字庫的分析和使用[J].海南大學學報:自然科學版,1995,13(2):148-154.

[3] LSI Logic.SC2005 Single- Chip Source Decoder[Z].2000.

主站蜘蛛池模板: 亚洲精品成人福利在线电影| 小13箩利洗澡无码视频免费网站| www.亚洲国产| 国产无套粉嫩白浆| 日韩中文字幕免费在线观看| 午夜啪啪网| 五月婷婷激情四射| 国产高清在线精品一区二区三区| 国产美女精品一区二区| 亚洲不卡av中文在线| 国内精品视频| 欧美亚洲日韩中文| 精品乱码久久久久久久| 又黄又湿又爽的视频| www.av男人.com| 久久精品国产亚洲麻豆| 亚洲电影天堂在线国语对白| 成人亚洲天堂| 99re热精品视频国产免费| 男女男免费视频网站国产| 在线看片中文字幕| 日本妇乱子伦视频| 亚洲欧美人成电影在线观看| 国产精欧美一区二区三区| 国产精品第三页在线看| 亚洲91精品视频| 五月综合色婷婷| 亚洲精品少妇熟女| 一级一毛片a级毛片| 亚卅精品无码久久毛片乌克兰| 自拍偷拍欧美日韩| 午夜视频免费一区二区在线看| 91探花在线观看国产最新| 亚洲人成网站18禁动漫无码| 国产色网站| 欧美一区二区人人喊爽| 久久人人97超碰人人澡爱香蕉| 精品国产91爱| 一本色道久久88综合日韩精品| 5555国产在线观看| 玖玖免费视频在线观看| 欧美a在线视频| 欧美α片免费观看| 毛片在线看网站| 99成人在线观看| 日韩av无码DVD| 四虎影视8848永久精品| 日韩欧美中文亚洲高清在线| 久久国产精品无码hdav| 黄色不卡视频| 热热久久狠狠偷偷色男同| 日韩精品亚洲人旧成在线| 亚洲中文无码av永久伊人| 伊人久久婷婷| 国产精品午夜电影| 91成人免费观看| 少妇高潮惨叫久久久久久| 久久这里只有精品国产99| 无码国产伊人| 成人国产精品视频频| 久久久久久尹人网香蕉 | a亚洲天堂| 免费一极毛片| 日本免费a视频| 国产青榴视频| 免费无码又爽又黄又刺激网站| 国产91在线|日本| 国产在线观看精品| av无码一区二区三区在线| 18禁黄无遮挡免费动漫网站| 亚洲综合色区在线播放2019 | 无码网站免费观看| 视频一区视频二区日韩专区| 欧美α片免费观看| 色妞永久免费视频| 欧美性久久久久| 2021亚洲精品不卡a| 丰满人妻被猛烈进入无码| 欧美日韩午夜| 中文字幕日韩视频欧美一区| 91美女视频在线观看| 免费无遮挡AV|