找回密码
 立即注册
首页 业界区 业界 点阵字体BDF的生成

点阵字体BDF的生成

终秀敏 2025-8-8 14:57:12
做点阵字体的原因,是我觉得Windows下的16点阵的宋体不如原来DOS下的好看。在分析点阵字体的时候,就萌生了要把Windows下的TTF字体转成点阵字体的想法。
在网上查了一些资料,TTF转点阵字体,绕不开的就是描边矢量化。这个倒是有工具Potrace可以做。但是转成的点阵字,是按比例缩放的,在特定的字体大小下,可能会显得模糊,那么就需要针对这个大小的字体,制作BDF格式的字体。比如我们编辑一个带有点阵字体的TTF文件,会发现它有一个或多个BMP字体。
如下图:
1.jpeg

 
于是,我就开始研究BDF文件格式。在网上搜索资料,得到以下的内容:
  1. //一个BDF字体文件,首先需要确定分辨率DPI,一般我们设置为96,符合大部分显示器的分辨率
  2. STARTFONT 2.1                                    //BDF版本号
  3. COMMENT 该字体来自于宋体                        //注释
  4. FONT Song                                        //字体名
  5. SIZE 12 96 96                                    //字体大小,格式SIZE <磅数> <X分辨率> <Y分辨率>
  6.                                                 //磅数=像素*72/DPI,16像素点阵,磅数就是12
  7. FONTBOUNDINGBOX 16 16 0 0                        //字体外围大小,<宽度> <高度> <X偏移量> <Y偏移量>
  8. STARTPROPERTIES 12                                //这里开始属性定义,数字代表有多少条属性
  9. COPYRIGHT 版权所有 (c) 2025 www.51xiazai.com    //版权定义
  10. FOUNDRY "www.51xiazai.com"                        //发行商,还是版权定义
  11. FAMILY_NAME Song                                //字体家族,在Windows中,同家族的字体会合并管理
  12. SEWINDTH_NAME "Normal"                            //字体的水平宽度,也就是字符的相对间距
  13.                                                 //例如 "Normal"(正常)、"Condensed"(紧缩)、"Expanded"(扩展)等。
  14.                                                 //这个属性对于等宽字体(Monospace)和可变宽度字体(Proportional)的分类很有用
  15. AVERAGE_WIDTH 16                                //字体的平均宽度
  16. PIXEL_SIZE 16                                    //字体的平均高度
  17. RESOLUTION_X 96                                    //X分辨率
  18. RESOLUTION_Y 96                                    //Y分辨率
  19. CHARSET_REGISTRY "gb2312"                        //字符集 CHARSET_REGISTRY 通常会和 CHARSET_ENCODING 一起出现
  20. CHARSET_ENCODING "O"                            //CHARSET_ENCODING 指定了注册机构下的具体编码版本
  21. FONT_ASCENT 12                                    //上升线:基线到最高点的距离
  22. FONT_DESCENT 4                                    //下降线:基线到最低点的距离
  23. ENDPROPERTIES                                    //属性定义结束
  24. CHARS 21126                                        //本BDF文件一共描述的字符数量
  25. //每一个字符的具体描述
  26. STARTCHAR U+554A                                //定义要描述的字符UNICODE
  27. ENCODING 21834                                    //字符的编码
  28. SWIDTH 16000 0                                    //字符的可伸缩宽度,这个值通常为DWIDTH值的1000倍
  29. DWIDTH 16 0                                        //字符宽度
  30. BBX 16 16 0 0                                    //单个字符的边界框 BBX <宽度> <高度> <X偏移量> <Y偏移量>
  31. //字符的点阵描述
  32. BITMAP
  33. 0000
  34. 0EFC
  35. EA08
  36. AA08
  37. AAE8
  38. AAA8
  39. ACA8
  40. AAA8
  41. AAA8
  42. AAA8
  43. EAE8
  44. AAA8
  45. 0C08
  46. 0808
  47. 0828
  48. 0810
  49. ENDCHAR
复制代码
 上面的点阵字符,描述的是汉字“啊”,它的点阵用二进制表示就是如下的样子:
2.jpeg

看明白了吗?所以BDF的字体格式很简单。
上面的字体大小是16*16,正好是8的倍数,那么,如果字体的大小不是8的倍数怎么办呢?
看下面的例子:

横向扩展成8的倍数,末位补0即可。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册