目前.Net Micro Framework系统仅支持Tinyfnt字体文件,官方仅提供两种字库:NinaB.tinyfnt,small.tinyfnt。用我后来做的程序打开这两种字体,发现它们仅支持如下100字符:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[/]^_`abcdefghijklmnopqrstuvwxyz{|}~°■▪
如果要显示汉字,并且设置大小、粗细等等参数,必须要用专门的转换工具把windows中的ttf字体转换为Tinyfnt字体。
这部分内容可以参见我以前写的文章《.Net Micro Framework研究—中文显示》:http://blog.csdn.net/yefanqiu/archive/2007/11/01/1862300.aspx
其实上篇文章有点问题,其实 AddFontToProcess C:/Windows/Fonts/Miramo.ttf 指令可以不用,真正起作用的是SelectFont命令中的FN参数。此外SelectFont命令中的UN参数是无效的,加这个参数和不加这个参数,转换后的Tinyfnf字体文件二进制数据完全相同。
我对我以前的字体转换工具又进行了改进,一是重新调整了界面,二是支持多语言(目前支持英文和简体中文两种)。
下面是软件截图:
由于官方不公开Tinyfnt字体的结构文件,自己只好从现成的二进制文件进行分析了,下面是我对Tinyfnt文件定义的一个结构体,其主要的参数如下:
private class MFFont
{
public UInt16 uSize; //数据长度 +27=文件总长度
public byte bytHeight; //字体高度
public UInt16 uGroupNum; //字体组个数
public UInt16 uFontNum; //字体个数
public UInt16[] uFontStart; //起始字符1
public UInt16[] uFontEnd; //结束字符1
}
通过这个结构体,你就可以还原出这个字库中包含的文字内容和字体高度了,不过很可惜,通过我目前的解析,还是无法从字体文件中获知原始字体文件的名称(如是宋体还是黑体等等?),是否粗体?斜体?等等参数。
除此之外剩下的字库内容想必就是字体的点阵结构了,具体的内容我没有多加验证,有机会我再和大家一一探讨。