核心提示古語有云:沒有最好,只有更好。如要制定一個好的點陣字庫格式,需考慮如下幾點因素:1、語言支持2、檢索效率3、空間占比4、維護與擴展一、語言支持網絡上可以搜索到各種各樣的點陣字庫軟件,歸類一下主要分3種格式:等高等寬,等高不等寬 古語有云:沒有最好,只有更好。如要制定一個好的點陣字庫格式,需考慮如下幾點因素:1、語言支持2、檢索效率3、空間占比4、維護與擴展一、語言支持網絡上可以搜索到各種各樣的點陣字庫軟件,歸類一下主要分3種格式:等高等寬,等高不等寬,不等高不等寬。前2種頗為常見,基本近80%,如果只是處理一些常規語言(如英文,中文,韓文等),基本滿足了。若遇到一些特殊語種(如阿拉伯語,泰文,印地語等),需要做字符疊加,內嵌等動作,則會相當困難,甚至很難實現。1、Hight Fixed等高等寬,等高不等寬都屬于等高模式,會強制補白邊。如下圖示: 2、Not Fixed不等高不等寬,也就是寬高不固定,只記錄有效像素區域信息。如:記錄字符有效像素寬高,定位信息(x,y偏移),以及走紙寬度(Device Width)。如下圖示: 建議:若要支持更多的語言,賽馬技巧甚至包含一些特殊語種,推薦使用 Not Fixed 格式,也便于將來語言擴展。由于只針對有效像素,故其繪畫效率也更高。二、檢索效率檢索效率高低,由檢索方式決定,不同的檢索方式,效率不一。另外不同的編碼方式,會間接影響其檢索方式。1、內碼例如:gb2312,big5,cp1252等,默認都是指內碼,由于編碼規范、連續,特別遇到等寬字庫的時候,可以通過編碼,字庫寬高,直接計算定位到點陣信息。如:Dos字庫。優點:可以省去檢索表空間。缺點:每一種編碼需對應一個字庫文件。支持的代碼頁越多,字庫文件也就越多,間接導致文件繁多,管理麻煩,并且還會出現一些空白點陣(對應空字符),重復字符(不同代碼頁)。2、Unicode將不同語言(或代碼頁)的字符統一編碼到unicode字符集,但由于需求不同用到的字符數也會不同,間接導致編碼無法連續。優點賽馬排位:將多語言統一到一個字庫文件,便于管理與維護。缺點:由于編碼不連續,必須建立檢索表配合檢索。注意:檢索方式,值得深究。三、空間占比說到空間,自然就會想到硬件成本,特別在這個薄利多銷的年代,控制好成本,也是競爭優勢的體現。針對字庫而言,空間占比最多的主要有2部分:檢賽馬外圍賠率索表,點陣信息。1、檢索表針對不連續編碼,可以通過編碼分段或編碼映射的方式,來優化檢索表空間,具體視情況而定。1.1、編碼分段將有效編碼,分成多段處理,盡量減少檢索信息中的空字符。當然也得考慮分段數量,若分段過多,也可能適得其反,甚至不能縮減空間,還會降低檢索效率。例如:使用編碼: 0x20,0x21,0x22,0x32,0x101日本賽馬live,0x102,0x105,0x107。可以分成2段,第一段:0x20-0x32,第二段:0x101-0x107,檢索表大小由分段字符之間的總字符數決定。1.2、編碼映射記錄有效使用編碼,然后通過搜索編碼,定位檢索信息位置。例如:使用編碼: 0x20,0x21,0x22,0x32,0x101,0x102,0x105,0x107。首先將這8個編碼按升序都記錄下來,然后為這8個編碼建立一個檢索表,檢索表大小由有效字符數決定。2、點陣信息存儲方式不同,空間大小也會存差異。字體設計基本都會考慮(橫向,縱向)字間距,若采用Height Fixed模式,小點陣( 2、Not Fixed不等高不等寬,也就是寬高不固定,只記錄有效像素區域信息7、如:記錄字符有效像素寬高,定位信息(x,y偏移),以及走紙寬度(Device Width)8、如下圖示: 建議:若要支持更多的語言,甚至包含一些特殊語種,推薦使用 Not Fixed 格式,也便于將來語言擴展20、二、檢索效率檢索效率高低,由檢索方式決定,不同的檢索方式,效率不一11、另外不同的編碼方式,會間接影響其檢索方式。12、1、內碼例如:gb2312,big5,cp1252等,默認都是指內碼,由于編碼規范、連續,特別遇到等寬字庫的時候日本賽馬直播,可以通過編碼,字庫寬高,直接計算定位到點陣信息。16、支持的代碼頁越多,字庫文件也就越多,間接導致文件繁多,管理麻煩,并且還會出現一些空白點陣(對應空字符),重復字符(不同代碼頁)17、2、Unicode將不同語言(或代碼頁)的字符統一編碼到unicode字符集,但由于需求不同用到的字符數也會不同,間接導致編碼無法連續18、優點:將多語言統一到一個字庫文件,便于管理與維護19、缺點:由于編碼不連續,必須建立檢索表配合檢索21、三、空間占比說到空間,自然就會想到硬件成本,特別在這個薄利多銷的年代,控制好成本,也是競爭優勢的體現。22、針對字庫而言,空間占比最多的主要有2部分:檢索表,點陣信息23、1、檢索表針對不連續編碼,可以通過編碼分段或編碼映射的方式,來優化檢索表空間,具體視情況而定24、1.1、編碼分段將有效編碼,分成多段處理,盡量減少檢索信息中的空字符25、當然也得考慮分段數量,若分段過多,也可能適得其反,甚至不能縮減空間,還會降低檢索效率26、例如:使用編碼: 0x20,0x21,0x22,0x32,0x101,0x102,0x105,0x10727、可立博賽馬賠率以分成2段,第一段:0x20-0x32,第二段:0x101-0x107,檢索表大小由分段字符之間的總字符數決定28、1.2、編碼映射記錄有效使用編碼,然后通過搜索編碼,定位檢索信息位置。29、例如:使用編碼: 0x20,0x21,0x22,0x32,0x101,0x102,0x105,0x107。30、首先將這8個編碼按升序都記錄下來,然后為這8個編碼建立一個檢索表,檢索表大小由有效字符數決定。31、2、點陣信息存儲方式不同,空間大小也會存差異32、字體設計基本都會考慮(橫向,縱向)字間距,若采用Height Fixed模式,小點陣(< 18 pixel)稍有優勢,否則 Not Fixed 更占優,特別灰度字庫,更是優勢明顯33、更有甚者,有人對點陣信息進行壓縮,效率如何得視實際情況而論34、四、維護與擴展這些年找了很多字庫軟件,為了分析其特點,當然也包括字庫文件格式35、有些字庫文件,直接純點陣,寬高信息體現在文件名中;有的弄了文件頭,但相對簡陋,只有寬高,字符數等信息;有的把檢索表弄成數組,點陣信息弄成bin文件;有的用png(所有字符存成一張圖),配合檢索表(數組、列表)定位等等;各有利弊,適合自己就是最好的36、1、維護維護,簡單理解就是萬一遇到問題,能快速定位并解決它38、2、擴展擴展,能根據新的需求,補充屬性,盡量能向前兼容(老版本)。39、單就點陣字庫而言,當需求越來越明確,后期增加屬性的概率也會越來越低,但要一步到位亦是很難。40、很多時候,我們的字庫數據都是以文件方式燒寫到Flash,而Bin文件(二進制格式)又是最省的方式41、如果定義bin文件,建議加個文件頭,便于快速了解字庫的基本信息42、例如:標識頭,版本信息,文件大小、字符數,掃描方式、位深度、寬高等信息43、標識頭能快速判斷文件是否有效;版本信息利于版本擴展;文件大小,有助于分析文件是否完整等等,這些看似不經意的信息,對于我們將來的維護與擴展,將會獲益良多