V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Arnie97
V2EX  ›  问与答

嵌入式设备,点阵字库如何压缩比较合适?

  •  
  •   Arnie97 · 2016-08-01 16:48:38 +08:00 · 2905 次点击
    这是一个创建于 2831 天前的主题,其中的信息可能已经有所发展或是发生改变。

    12x12 的汉字点阵字体为例,为了满足字节对齐的要求,一般采用 12x16 的格式来记录,每个字的大小是 24 Bytes 。如果只覆盖 GB 2312 的 6763 个汉字,再加上 ASCII 字符和其他一些常用符号,按 7000 字计算,需要占用 168 KB 。

    为了节省空间,考虑到有效的数据其实只有 11x11 ,不进行字节对齐了,每个字的大小是 15 Bytes ,仍然需要 106 KB ,而且读取字库的代码量肯定会增加,索引效率也会降低。维基百科说 7-zip 的 LZMA 算法非常适于嵌入式设备,不知道 LZMA 的代码本身要用多少空间?

    或者,不知道有没有什么更好的方法进行压缩?又如何从压缩数据中提取出一个字的点阵呢?

    10 条回复    2016-08-02 12:44:30 +08:00
    tabris17
        1
    tabris17  
       2016-08-01 16:57:04 +08:00   ❤️ 1
    一夜回到 286 的 DOS 时代啊.

    我记得当年汉卡有使用偏旁部首组合来降低内存使用的,就是拆字,不过这样要保存一个拆字表,而且合体字会很难看
    tabris17
        2
    tabris17  
       2016-08-01 16:59:55 +08:00
    cnnblike
        3
    cnnblike  
       2016-08-01 17:11:45 +08:00 via iPhone   ❤️ 1
    来用 minilzo
    am241
        4
    am241  
       2016-08-01 17:35:03 +08:00 via Android
    做过游程编码,然而字小的时候效果并不好
    dacapoday
        5
    dacapoday  
       2016-08-01 20:04:42 +08:00
    最好还是在外部弄个 EEPROM 来存字库吧,按步进 24 Bytes 来读取;而且压缩也是要序列化和解序列化这都要加载整个压缩文件到内存,然后再读字,这 MCU 吃得消嘛。
    dacapoday
        6
    dacapoday  
       2016-08-01 20:10:58 +08:00
    话说你主控什么型号,没有片内 EEPROM ?
    blanboom
        7
    blanboom  
       2016-08-01 21:13:21 +08:00 via iPhone
    还是装个 SPI Flash 靠谱。
    GPIO
        8
    GPIO  
       2016-08-01 21:27:01 +08:00
    之前也遇到过这个问题,后来加了个 Flash 解决了。
    nareix
        9
    nareix  
       2016-08-02 00:10:33 +08:00
    你这是单片机吧,现在嵌入式都屌炸天直接上 freetype 没压力
    Arnie97
        10
    Arnie97  
    OP
       2016-08-02 12:44:30 +08:00 via Android
    @nareix 就算能跑 FreeType 我也不会玩 T_T 以前在 PC 上写了一段用 FreeType 渲染 TTF 字体( Simsun )的代码,小字号的效果又粗又糊,可能是没有使用内嵌点阵?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2066 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:28 · PVG 09:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.