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