軍事指揮系統(tǒng)中VxWorks下漢字顯示技術(shù)
2.4 點(diǎn)陣漢字存儲(chǔ)結(jié)構(gòu)
國(guó)家標(biāo)準(zhǔn)對(duì)漢字庫(kù)結(jié)構(gòu)做了統(tǒng)一規(guī)定:字庫(kù)分為94個(gè)區(qū),每個(gè)區(qū)有94個(gè)漢字,每個(gè)漢字有確定的區(qū)和位編碼,用兩個(gè)字節(jié)表示,第一個(gè)字節(jié)表示漢字所在的區(qū)號(hào),第二個(gè)字節(jié)表示位號(hào),即所謂的區(qū)位碼。每個(gè)漢字在字庫(kù)中以點(diǎn)陣字模形式存儲(chǔ),一般采用16×16點(diǎn)陣、24×24點(diǎn)陣,每個(gè)點(diǎn)用二進(jìn)制位(0或1)表示,對(duì)應(yīng)在屏幕上顯示出來(lái)就是相應(yīng)的漢字。每個(gè)漢字都有惟一的區(qū)位碼,通過(guò)區(qū)位碼計(jì)算出漢字在字庫(kù)中的位置,從而確定漢字的字模。
點(diǎn)陣漢字字庫(kù)C語(yǔ)言文件有固定的結(jié)構(gòu),分為三個(gè)部分:點(diǎn)陣屬性表、點(diǎn)陣信息描述總表和點(diǎn)陣信息表。點(diǎn)陣屬性表用來(lái)描述點(diǎn)陣漢字的字符結(jié)構(gòu)和字模結(jié)構(gòu)參數(shù)的結(jié)構(gòu)體,包含參數(shù)有像素大小、字符名稱、字符家族名稱等,特別定義了指向點(diǎn)陣信息總表的數(shù)組指針,字體驅(qū)動(dòng)程序利用這個(gè)指針尋找點(diǎn)陣信息總表。點(diǎn)陣信息描述總表 它是一個(gè)存放指向點(diǎn)陣信息表指針的動(dòng)態(tài)數(shù)組,其元素個(gè)數(shù)取決于漢字點(diǎn)陣信息表的個(gè)數(shù)。
點(diǎn)陣信息表點(diǎn)陣信息表以數(shù)組的形式表示,主要用來(lái)存儲(chǔ)漢字的GB2312碼(西文是ASCII碼)和詳細(xì)點(diǎn)陣信息??梢允且粋€(gè)表也可以是若干個(gè)表。把漢字按 GB2312編碼的頁(yè)分類(lèi),構(gòu)建多個(gè)漢字分表,也可以把中西文裝在混合表里做成一個(gè)大表,西文字符被擴(kuò)展成雙字節(jié)存儲(chǔ)。
3 點(diǎn)陣漢字字庫(kù)實(shí)例
自己開(kāi)發(fā)點(diǎn)陣存儲(chǔ)、點(diǎn)陣獲取、點(diǎn)陣顯示,改造WindML的雙字節(jié)或單字節(jié)顯示函數(shù),使其能判斷漢字碼,一旦判斷出漢字碼,則使用自己開(kāi)發(fā)的點(diǎn)陣獲取、點(diǎn)陣顯示等把漢字顯示出來(lái)。該方法對(duì)點(diǎn)陣的操作更加靈活,適合非標(biāo)準(zhǔn)的點(diǎn)陣算法,或者當(dāng)開(kāi)發(fā)者已有成熟的點(diǎn)陣操作方法時(shí),把該方法綁接到WindML上。
不必理會(huì)WindML雙字節(jié)編碼機(jī)制,這里需要的是一個(gè)漢字的點(diǎn)陣字庫(kù),這個(gè)點(diǎn)陣字庫(kù)不必按照WindML的雙字節(jié)編碼機(jī)制進(jìn)行編碼,里面所存儲(chǔ)的只是漢字的點(diǎn)陣信息和區(qū)位碼信息,這個(gè)字庫(kù)可以通過(guò)從Windows中導(dǎo)出;由于不選用WindML的雙字節(jié)編碼機(jī)制,所以對(duì)于VxWorks中關(guān)于如何控制打點(diǎn)以及顯示點(diǎn)陣字體驅(qū)動(dòng),并不需要具體了解;更重要的是擁有更大的靈活性,只需把自己所寫(xiě)的漢字顯示函數(shù)綁定到WindML上面即可。因此這里必須要求自己寫(xiě)點(diǎn)陣的存儲(chǔ)、點(diǎn)陣顯示、漢字顯示函數(shù)。做起來(lái)比較簡(jiǎn)單,只要求了解漢字編碼的基本知識(shí),即漢字雙字節(jié)編碼中,高、低字節(jié)的最高位都是為‘1’,而西文字符編碼中最高位為‘0’,利用這點(diǎn)來(lái)判斷所要顯示的字符是漢字還是英文。
在設(shè)計(jì)開(kāi)發(fā)過(guò)程中,在現(xiàn)有的西文字庫(kù)的基礎(chǔ)上進(jìn)行修改,添加相應(yīng)的字體參數(shù)和漢字的點(diǎn)陣信息,形成點(diǎn)陣漢字字庫(kù)文件uflhz12.c,uflhz16.c,uflhz24.c,以分別存儲(chǔ)12,16和24號(hào)宋體的字庫(kù)信息。這個(gè)過(guò)程用Windows編程來(lái)實(shí)現(xiàn)。
以下是16號(hào)宋體字庫(kù)文件中的點(diǎn)陣信息表:
評(píng)論