解析BMFont所生成的二进制文件
Author: OyaKti(SRK)
Date: 2016/8/9(七夕)
TCC编译的. 钦定ANSIC
讲真, 以下文章都是胡扯, 写这篇文章的时候脑子故障了. 我他妈直接读内存, 真他妈智障!
DirectX学习笔记[5]介绍了字体的渲染, 所以我们需要一个方便的位图字体生成方法. Cocos2D-X使用的BMFont就是一个不错的选择. 通过BMF生成的位图字体会有两个文件, 一个是字体的贴图, 一个是保存字体信息的fnt文件, fnt文件有xml格式的, 有纯文本格式的, 有二进制格式的, 为了减少储存空间, 以及好玩, 我就决定使用二进制格式来储存字体信息, 所以, 为了使用字体, 我们必须解析二进制文件中储存的字体信息!
先来个效果预览:
怎么样啊, 是不是很有逼格?
解析二进制文件通常需要官方的文档以便获取二进制文件的布局(Layout), BMF的文档十分简洁, 一眼就能读懂.文档地址
获得了布局信息之后自然可以直接编写程序, 但是为了方便展示, 我们通常把布局反映到winHex上. 我通过不同的着色方式和幻灯来对文件进行了着色, 效果如下.
前半部分五颜六色七彩斑斓的是前三个区块以及字符区块的第一个字符, 后面灰白相间的部分则是剩余的字符.
具体的布局情况请浏览官方的文档.
万事俱备, 只欠东风.
我们现在就开始码代码.
首先我们得定义字体, 页和字符.
1 | typedef struct Char{ |
因为是简单的解析, 所以通道等信息就不包含在内了.
有了这些定义, 我们就可以解析了.
一口气把代码全都放上来吧!(偷懒max)
1 | #include <stdio.h> |
我的代码没有一点儿注释~ 部分魔数(Magic Number)也是数出来的, 不过不影响使用. 你看出这篇文章的用意了吗? 没错! 没错! 没错! 就是在证明我没有弃坑! 没有弃坑! 没有弃坑!(然后顺带增加一篇博文), 好了, 再见~