11,.Net Micro Framework研究—Tinyfnt字体研究

       作者: 刘洪峰

 

目前.Net Micro Framework系统仅支持Tinyfnt字体文件,官方仅提供两种字库:NinaB.tinyfnt,small.tinyfnt。用我后来做的程序打开这两种字体,发现它们仅支持如下100字符:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€°■▪

如果要显示汉字,并且设置大小、粗细等等参数,必须要用专门的转换工具把windows中的ttf字体转换为Tinyfnt字体。

这部分内容可以参见我以前写的文章《.Net Micro Framework研究—中文显示》:https://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

    } 

通过这个结构体,你就可以还原出这个字库中包含的文字内容和字体高度了,不过很可惜,通过我目前的解析,还是无法从字体文件中获知原始字体文件的名称(如是宋体还是黑体等等?),是否粗体?斜体?等等参数。

除此之外剩下的字库内容想必就是字体的点阵结构了,具体的内容我没有多加验证,有机会我再和大家一一探讨。