- ctor 開啟字型檔以後,就開始處理 (這邊是開 .alf)
- 格式
- byte 1: line spacing
- byte 2: line height
- byte 3-6: glyphs (character range)
- byte 7-8: maxium width
- byte 9-12: character count
- 接下來就是循序讀出各字元的 x, y, w, h, xo, yo, xa
- byte 1-2: character
- byte 3-4: x
- byte 5-6: y
- byte 7-8: width
- byte 9-10: height
- byte 11-12: xoffset
- byte 13-14: yoffset
- byte 15-16: xadvance 下一個字元跟目前字元的間隔
- 再放到對應 character 的 glyphs 陣列裡 (glyphs[character]=new Glyph(x, y, w, h, xo, yo, xa)
- 讀完 .alf(字型資訊),接著開啟 .ali,這邊是真正的字型資料,先把整個 .ali 讀取到記憶體裡 (由 AlbiteImageMono 處理,同樣也有檔頭,但較簡單,前4個bytes是magic number,接著的兩個bytes是width,然後再來的兩個bytes是height)
- 把必要的字元先處理起來,像是 ' ', '?', '-'
- 其他的字元都是畫的時候,依據 glyphs 資訊去存取記憶體裡的 buffer
照這樣看起來,如果要依樣畫葫蘆,將中文字型製作成 .ali 的話,會遇到的問題是記憶體問題。AlbiteFont 會將整個 .ali 載入到記憶體裡,製作出來的 .ali 會有多大呢? 假設字的大小是12x12,要完整收文泉驛的20932個字,那大約是3MB左右。依照 SE T700 的規格,內部記憶體只有 25MB。未知的是可用記憶體,所以必須考慮最壞的情況,記憶體會不足!!
會使用自己的字型,我想應該是考慮到平台相容的問題。
沒有留言:
張貼留言