地主家的好儿子 发表于 2023-3-9 13:58:19

casio 9860/9750 中文点阵字体 从原理到放弃 基于fxlua

本帖最后由 地主家的好儿子 于 2023-3-9 20:32 编辑

基于hzk16点阵字体显示

环境:pc + love2d 模拟运行环境,先可以不用碰sdk

原理解释下:

HZK16字库是符合GB2312国家标准的16×16点阵字库,HZK16的GB2312-80支持的汉字有6763个,符号682个。 其中一级汉字有 3755个,按声序排列,二级汉字有3008个,按偏旁部首排列。
XXX-16意味着每个中文的像素是16*16即256个像素,同理hzk12 ,意味着每个中文的像素是12,hzk16字库是二进制文件 每个汉字有32个字节,所以hzk16字符非常小,两百多k,编译进bin基本不改变大小
hzk16字库教程非常多,食用方便

1) 载入字库
local ffile = io.open("HZK16", "rb")
sdata = ffile:read("*all")
ffile:close()

3) 单字绘图 有了bit库可以方便进行位操作,用矩形代替9860sdk画点,真计算不能直接绘制,等绘制完成后 再一起更新到屏幕function print_char(x,y,a0,a1)
      local pos = (94*a0+a1)*32
      for i = 1,16 do
                for j = 1,2 do
                        sb = string.sub(sdata,j+pos+2*(i-1),j+pos+2*(i-1)+1)
                        num = string.byte(sb,1)
                        bnum = bit:d2b(num)
                        for k = 1,8 do
                              if bnum==1 then
                                        G.rectangle("fill",x+k*1+j*8,y+i,1,1)
                              end
                        end
                end
      end
end

接下来要解决utf8 或gbk 如何批量转到cp936编码的问题

页: [1]
查看完整版本: casio 9860/9750 中文点阵字体 从原理到放弃 基于fxlua