bin字库的格式,bin字库如何生成,bin字库如何解析?

  • 为何选择.bin字库?
    芯片处理性能不是很好时,为了降低cpu处理数据量,才选择使用.bin字库;矢量字库虽然美观,但解析耗时故未采用。

  • minigui 自带的bin字库格式是怎样的?
    1.font目录下有8x16-iso8859-1.bin ,song-16-gb2312.bin
    翻阅资料,其实就是把数组以二进制的形式保存写入到文件中;
    eg:
    unsigned char GBK_font[]={
    0x00,0x00,0x00,0x00,0x04,0x20,0x19,0x20,0x17,0xF0,0x19,0x70,0x11,0xA8,0x1F,0x28,
    0x1F,0xC8,0x1F,0xF8,0x15,0xC8,0x0A,0xC8,0x0F,0xC8,0x0A,0xF8,0x12,0x00,0x13,0xF0,/* “?”, 7614*/};

fwrite(GBK_font, sizeof(GBK_font), 1, fd);

生成的文件就是.bin文件;网上的C转bin工具其实就是实现这个功能,只不过包了一层壳而已;
完整函数:

int wfoo()
{FILE *fd;char *fName="gbk.bin";fd=fopen(fName, "w+");if(fd==NULL){perror("fopen fail\n");return -1;}fwrite(GBK_font, sizeof(GBK_font), 1, fd);fclose(fd);return 1;
}
  • 如何解析.bin文件?
    我的想法是全部读出来,按字节打印出来;

    int rfoo(const char name)
    {
    int i=0;
    FILE fd;
    long offset=0;
    unsigned char GBK_font[16
    7614
    2]={0};

     if(access(name, F_OK)!=0){fprintf(stderr, "%s not exist", name);return 0;}fd=fopen(name, "r");if(fd==NULL){perror("fopen fail\n");return -1;}#if 0fseek(fd, 0, SEEK_END);offset = ftell(fd);printf("offset:%d\n", offset);#elsefread(GBK_font, sizeof(GBK_font), 1, fd);for(i=0; i<sizeof(GBK_font); i++){if(i!=0 && i%16==0)printf("\n");printf("0x%02x,", GBK_font[i]);}printf("\n");#endiffclose(fd);return 1;
    

    }

做过黑白屏显示的都知道,生成的1616的中文字库,其实一般都是分上下两部分,即上面8个字节,下面8个字节,主要是和白屏是按页写的原因,姑且这样设计的吧!
其实刚不知道要多大的数组,计算了一下文件的大小,再由每个字符所占空间,计算出一共有多少个字符;
16
16的中文gb字库的每个字符点阵字节数是32【宽16个字节,上下两部分】,
ls -l 该字库大小为 243648
故该字库包含了 7614个字符;
(写一个扫描解析函数,每次解析32个字节,按位解析,即可画出这个字符;为此,写了一个脚本,实现的两种方式,用数字0,1分别代表解析的每一位,把结果写入文件,打开该文件就可以看到字符点阵样子,还可以使用shell终端按颜色打印,把0,1解析为对应的颜色值,这样显示的字符更加直观)。


其实,当看到7614个字符时,头都大了,那种编码的字库有7614个字符?找了半天资料也没有答案;
原始方法:一个一个字符画出来,有了上面自制的工具,把解析出来的数组,一个一个打印出来,慢慢的找到了规律;
对比GB2312简体中文编码表:
http://www.knowsky.com/resource/gb2312tbl.htm
逐渐得到一个规律,并不是都乱掉了,
其实是这个字库做了裁剪,去掉了一些无用的字符;
花了一天半,把每个其实字符打印出来,总算去除多余的字符;得到完整的字符库;
至此,有完整的字库,在PCto2002w完美版工具下,导入该文件在选择字体,即可生成想要的自制字库文件。

其实,在生成的字库时还遇到一些问题:

  • 生成的文件后面的注释字符乱码?
    刚开始还以为是生成的字符有问题,取几个特殊易辨别的字符验证一下发现是没问题的;所以需要处理一下。我的做法是函数打开两个文件,按行读文件,把乱码字符用字符文件中的字符替换;期间遇到的问题是需要转码,不然无论怎么替换都是乱码数据;
    其实,如果只为实现替换,这个注释是不会写入到.bin文件的,直接替换到数组里面,再把数组写入文件,后缀为.bin,其实就完成了功能;

  • 如何测试字库是否正确?
    自制字库完成后,上传字库替换minigui自带的字库即可;
    增加,需要修改MiniGUI.cfg配置,新增配置项即可;

对应工具上传到github路径:
https://github.com/first-aid/minigui-bin-font/commits/master

欢迎大家指正完善。

minigui bin字库制作相关推荐

  1. 二 unicode字库制作(智源GM813X多国语言OSD开发)

    字库的制作关键是需要软件,文章最后会提供一种字库制作软件,此文将详细介绍怎么提取字库方法. 一 制作字库格式. (该图就是字库软件主页面,ENCODE 编码选择UNICODE ,size 可以选择小一 ...

  2. linux bin文件制作

    linux bin文件制作 一 Linux安装文件 Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类, 第一:打包或压缩文件tar,zip,gz等,一般解压 ...

  3. 字王x2ttf字库制作软件发布:“全民造字时代来临,会涂鸦,就会truetype”

    "全民造字时代来临,会涂鸦,就会truetype" x2ttf,涂鸦造字,又名bmp2ttf,是一款功能强大.操作简单的"傻瓜式".批量化truetype字库制 ...

  4. 【杰理AC696X】外挂FLASH音乐播放及Bin文件制作

    外挂FLASH音乐播放及Bin文件制作 测试SDK版本:<ac696n_soundbox_sdk_v1.6.0> 文章目录 外挂FLASH音乐播放及Bin文件制作 前言 一.板级配置 1. ...

  5. linux bin文件制作,linux 将脚本制作成二进制bin文件

    本教程,实现将shell脚本和需要安装的软件包制作成二进制bin文件 1.编写shell脚本 这里有个安装jenkins的shell脚本,脚本内容如下: #!/bin/bash sed -n -e ' ...

  6. 通过矢量字库制作点阵字库

    1.字库导出步骤 涉及软件:FontEditor 1.3.3 FontEditor 为一款功能强大的字体编辑和字体格式转换工具,支持制作 32*32 的全字库.能将 TTF,OTF 矢量字库转换为 B ...

  7. Tesseract-OCR字库制作

    安装:url:https://tesseract-ocr.github.io/tessdoc/Home.html 下载网址:V5.00--->WIN32,WIN64 依赖:JDK  --> ...

  8. STM32CubeIDE 制作中英字库 显示屏显示中英文

    随言: 目标制作宽度 x 高度  为16 x 16大小的中文字库 和 8 x 16大小英文字库,且在LCD显示. 第一个值小于127的解析为英文字符,否则取连续两个值解析为GB2313. 中文编码格式 ...

  9. LittleVGL (LVGL)干货入门教程四之制作和使用中文汉字字库

    LittleVGL (LVGL)干货入门教程四之制作和使用中文汉字字库 前言: 阅读前,请确保你至少拥有以下条件: 已实现显示API(教程一已实现, 链接:LittleVGL (LVGL)入门教程一之 ...

最新文章

  1. 【教程】怎么同时同时ping1000个IP地址?
  2. PMCAFF微课堂已结束 | 前YY产品总监深度揭秘P2P运营推广精髓
  3. 动手使用ABAP Channel开发一些小工具,提升日常工作效率 1
  4. java如何解压rar文件怎么打开,java解压rar文件
  5. Android手机mm开头的大文件,[2018年最新整理]2Android源代码编译命令m和mm和mmm以及make分析.doc...
  6. bootstrap 导航菜单 折叠位置_教大家如何编写一个网页导航条
  7. node.js fs.open 和 fs.write 读取文件和改写文件
  8. 2018(上)C高级第0次作业
  9. FreeSSL.cn 创建免费 https 证书
  10. Multithreading and Synchronization
  11. clickhouse建表语句行数太多导致报错 Unmatched parentheses: (
  12. 【对可转债和期权的初步认识】
  13. 逐帧动画和补间动画的区别于各自的优缺点
  14. iframe中的方法
  15. 大数据时代的信息茧房问题
  16. 深圳中学因招聘上热搜:名校博士挤破头想进,教学成绩也确实不服不行!
  17. 厦门有哪些靠谱的互联网公司
  18. 风味地图:驴友至爱的众包美食应用
  19. (二)GL 简单绘制
  20. 【管理研习社】给CEO们推荐一些书

热门文章

  1. 怎样用计算机命令提高网速,怎样提高网速,详细教您电脑怎样提高网速
  2. 智邦国际ERP系统帮助企业控制成本
  3. 裕太微在科创板上市:市值约186亿元,哈勃科技和小米基金为股东
  4. 《Kotlin 极简教程 》第4章 基本数据类型与类型系统
  5. mavros连接px4
  6. Hibernate中的注解说明
  7. 爬虫scrapy之四(20)
  8. 竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪)
  9. 手机短信中特殊字符导致链接失效的问题修复
  10. org.hibernate.PropertyNotFoundException: Could not find a setter for id in XXX