java中点阵字库的解析

最近研究点阵字库的展示,搜到很多东西,而且大多都是C语言做的,作为一个Android开发的码农,整理了一篇java版的,一方面自己记录,一方面帮助有需要的人。。。

 

点阵字,顾名思义,就是用点组成一个个的字,然后展示在某些东西上,常见的有成人用品店外面的LED上面那几个字,大家都懂得。

 

点阵字库就是收集了这些字的一个库。

 

有人要问了,为毛要有这个库,在点阵上面展示个字吗不就是,自己排版一下,然后点亮的用1,不亮的用0,然后记在文件里,用到的时候读取然后展示不就行了吗。

我要说,我开始也是这么想的。

但是,GBK有6763个汉字,你怎么破?

 

有人说有点阵字库生成器,输进去就出来编码了。

我要说,那个出来的是一个文本文件,而且我找了一个生成两个文件,一个索引文件,一个字库文件,而且两个加起来有1M左右~这个在我这个做Android的人眼里是巨大的文件了。

 

而且,点阵这个东西,有12*12,16*16,24*24,32*32。。。。各种型号,这个怎么破?

 

所以我在网上各种找资源,最后确定在HZK...和ASC..这些库上面了。

这个东西是啥呢?

其实是早期的DOS系统里面为了展示文字所用的文字库,和现在win和Mac下面的.ttf文件是一个意思,就是系统的字体库。

 

 UCDOS6.0系统文件列表 

 C:\UCDOS\FNT目录下:

ASC12             12x6点阵西文字库

HZK12             12x12点阵汉字库

HZK24T            24x24点阵中文符号字库

HZK24S            24x24点阵宋体汉字库

HZK12F            24x24点阵仿宋体汉字库

HZK12H            24x24点阵黑体汉字库

HZK12K            24x24点阵楷体汉字库

ASC40             40x20点阵西文字库

HZK40T            40x40点阵中文符号字库

HZK40S            40x40点阵宋体汉字库

ASC48             48x48点阵西文字库

HZK48T            48x48点阵中文符号字库

HZK48S            48x48点阵宋体汉字库

ASCPS             11种西文轮廓字库

HZKPST            中文符号轮廓字库

HZKPSSTJ          宋体汉字库

HZKPSFSJ          仿宋体汉字库

HZKPZHTJ          黑体汉字库

HZKPSKTJ          楷体汉字库

 

ps:上面这个是网上找的~我没有验证,而且我也只用了其中几个。

 

下面说说这玩意怎么用吧,这也是字库的好处之一,就是无需索引,你直接就能找到这个字的位置。

 

字库点阵格式定义

ASC12  ' 8x12 ASCII点阵 一个字符12Byte

ASC16  ' 8x16 ASCII点阵 一个字符16Byte

ASC48  '24x48 ASCII点阵 一个字符144Byte

 

HZK12  '16x12 宋体汉字点阵  一个汉字24Byte

HZK14  '16x14 宋体汉字点阵  一个汉字28Byte

HZK16  '16x16 宋体汉字点阵  一个汉字32Byte

HZK16F '16x16 繁体宋体汉字点阵  一个汉字32Byte

 

HZK24F '24x24 仿宋汉字打印点阵  一个汉字72Byte

HZK24H '24x24 黑体汉字打印点阵  一个汉字72Byte

HZK24K '24x24 楷体汉字打印点阵  一个汉字72Byte

HZK24S '24x24 宋体汉字打印点阵  一个汉字72Byte

HZK24T '24x24 宋体符号打印点阵  一个符号72Byte

 

HZK40S '40x40 宋体汉字点阵  一个汉字200Byte

HZK40T '40x40 宋体符号点阵  一个符号200Byte

 

HZK48S '48x48 宋体汉字点阵  一个汉字288Byte

HZK48T '48x48 宋体符号点阵  一个符号288Byte

 

http://bbs.youkuaiyun.com/topics/350189831

 

1.点阵字库

       点阵字库是把每一个汉字都分成16×16或24×24个点,然后用每个点的虚实来表示汉字的轮廓,常用来作为显示字库使用,这类点阵字库汉字最大的缺点是不能放大,一旦放大后就会发现文字边缘的锯齿。 

矢量字库保存的是对每一个汉字的描述信息,比如一个笔划的起始、终止坐标,半径、弧度等等。在显示、打印这一类字库时,要经过一系列的数学运算才能输出结果,但是这一类字库保存的汉字理论上可以被无限地放大,笔划轮廓仍然能保持圆滑,打印时使用的字库均为此类字库.

2.点阵字库结构

      在汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉字都是由一个矩形的点阵组成,0代表没有,1代表有点,将0和1分别用不同颜色画出,就形成了一个汉字,常用的点阵矩阵有12*12, 14*14, 16*16三种字库。  字库根据字节所表示点的不同有分为横向矩阵和纵向矩阵,目前多数的字库都是横向矩阵的存储方式(用得最多的应该是早期UCDOS字库),纵向矩阵一般是因为有某些液晶是采用纵向扫描显示法,为了提高显示速度,于是便把字库矩阵做成纵向,省得在显示时还要做矩阵转换。我们接下去所描述的都是指横向矩阵字库。

       对于16*16的矩阵来说,它所需要的位数共是16*16=256个位,每个字节为8位,因此,每个汉字都需要用256/8=32个字节来表示。  即每两个字节代表一行的16个点,共需要16行,显示汉字时,只需一次性读取32个字节,并将每两个字节为一行打印出来,即可形成一个汉字.

//解析16*16的点阵字库
public class Font16 {  
    private Context context;  
  
    public Font16(Context context) {  
        this.context = context;  
    }  
  
    private final static String ENCODE = "GB2312";  
    private final static String ZK16 = "HZK16";  
  
    private boolean[][] arr;  
    int all_16_32 = 16;  
    int all_2_4 = 2;  
    int all_32_128 = 32;  
  
    public boolean[][] drawString(String str) {  
        byte[] data = null;  
        int[] code = null;  
        int byteCount;  
        int lCount;  
  
        arr = new boolean[all_16_32][all_16_32];  
        for (int i = 0; i < str.length(); i++) {  
            if (str.charAt(i) < 0x80) {  
                continue;  
            }  
            code = getByteCode(str.substring(i, i + 1));  
            data = read(code[0], code[1]);  
            byteCount = 0;  
            for (int line = 0; line < all_16_32; line++) {  
                lCount = 0;  
                for (int k = 0; k < all_2_4; k++) {  
                    for (int j = 0; j < 8; j++) {  
                        if (((data[byteCount] >> (7 - j)) & 0x1) == 1) {  
                            arr[line][lCount] = true;  
                            System.out.print("@");  
                        } else {  
                            System.out.print(" ");  
                            arr[line][lCount] = false;  
                        }  
                        lCount++;  
                    }  
                    byteCount++;  
                }  
                System.out.println();  
            }  
        }  
        return arr;  
    }  
  
    protected byte[] read(int areaCode, int posCode) {  
        byte[] data = null;  
        try {  
            int area = areaCode - 0xa0;  
            int pos = posCode - 0xa0;  
  
            InputStream in = context.getResources().getAssets().open(ZK16);  
            long offset = all_32_128 * ((area - 1) * 94 + pos - 1);  
            in.skip(offset);  
            data = new byte[all_32_128];  
            in.read(data, 0, all_32_128);  
            in.close();  
        } catch (Exception ex) {  
        }  
        return data;  
    }  
  
    protected int[] getByteCode(String str) {  
        int[] byteCode = new int[2];  
        try {  
            byte[] data = str.getBytes(ENCODE);  
            byteCode[0] = data[0] < 0 ? 256 + data[0] : data[0];  
            byteCode[1] = data[1] < 0 ? 256 + data[1] : data[1];  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        return byteCode;  
    }  
  
}  

 

 

HZK16点阵字库详解:偏移计算、字模读取与C语言实现 在嵌入式显示系统中,LED点阵屏、LCD和OLED屏显示中文时,离不开点阵字库与字模数据的正确读取。GB2312编码下的HZK系列汉字库是应用最广泛的基础资源,其存储结构决定了一个汉字占用多少字节,而区位码偏移计算则是定位字模的关键。理解字节排列方式(横向取模与纵向取模)能有效避免显示乱码和镜像问题。HZK16作为16×16点阵字库,每个汉字占32字节,配合ASC16半角字库即可实现中英文混排显示。从文件系统读取到内存数组映射,再到字符串遍历时的编码判断,C语言实现有多种高效方案。本文梳理字库偏移公式、字模 阅读详情

相关推荐

HZK/ASC点阵字库读取原理与嵌入式应用实践

在嵌入式显示系统中,汉字的渲染往往受限于MCU资源和屏幕分辨率,点阵字库因此成为低成本、高可靠性的主流方案。HZK系列(如HZK16、HZK24)与ASC系列字库以固定大小的字节数组存储字模,其读取核心在于根据GB2312区位码计算文件偏移量。理解横向/纵向取模差异,并针对LCD、OLED、LED点阵屏进行坐标适配,是实现中文菜单和界面信息显示的关键技术。本文结合C语言实现,从字模存储原理、偏移计算公式、代码封装到资源优化(字库裁剪、Flash数组化),系统梳理点阵字库在嵌入式工程中的完整应用路径,帮助开发

weixin_29193259的博客 230

Java调取16*16点阵HZK汉字库并打印点阵

Java读取汉字库

weixin_50088541的博客 1596

java中使用点阵字库demo源代码

在某些场合,系统自带的字库并不能令人满意,或者在你需要特别的字体时,你希望能附带上该字库。这个案例手写一个小程序来生成点阵字库,比系统自带的更灵活。

点阵字库在JAVA中的实现

前言:为什么要使用点阵字库      在某些场合,系统自带的字库并不能令人满意,或者,在你需要特别的字体时,你希望能附带上该字库。      那为什么又需要点阵字库呢?因为在使用较小的字体的时候,点阵字库能更清晰,同时,由于点阵字库并不包含路径等信息,因此,字库文件的大小也很小,便于携带。 如何生成点阵字库      在此,我并没有打算在此文中说明如何生成点阵字库,其实有很多现成的点阵

ycb1689的专栏 2703

点阵字库在JAVA中的实现源码

点阵字库在JAVA中的实现源码

Java 字符串转换成点阵字库显示

http://blog.youkuaiyun.com/placidzhang

树莓派使用java读取中文点阵字库并展示

使用java读取中文点阵字库中文点阵字库原理具体java代码 为后续使用(ssd1306)12864oled(或12832oled)展示中文做准备~ 中文点阵字库原理 这篇文章我觉得很容易看懂,对理解字库原理非常重要:《HZK16汉字16*16点阵字库的使用及示例程序 》 请优先读这篇文章,再往后看本文 作者在文章中提供了字库的下载地址,这里就不贴了。 具体java代码 本代码仅为了精简且让大家看懂,很多代码安全、魔鬼数字以及性能的东西未考虑,实际生产环境的代码请自行完善。 public s

chenqide163的博客 774

ucdos70(ucdos)

ucdos 7.0(一定要这么多描述吗)(一定要这么多描述吗)

java 绘制点阵_[Java基础知识]点阵字库在JAVA中的实现

import java.io.*;import javax.swing.*;import java.awt.*;import java.awt.image.*;public class Test extends JFrame {byte[] dotfont;BufferedImage imgCH;int[] verify = {128, 64, 32, 16, 8, 4, 2, 1};String...

weixin_35122994的博客 453

ucdos60(ucdos)

ucdos 6.0(一定要这么多描述吗)(一定要这么多描述吗)

汉字点阵库大全 HZK12 HZK14 HZK16 HZK24 HZK32 HZK40 HZK48 ASC12 ASC16 ASC48

最全的字母、汉字点阵库大全: HZK16S 宋体 HZK16F 仿宋 HZK16H 黑体 HZK16K 楷体 HZK16Y 幼圆 HZK16L 隶书 HZK16C 粗体 HZK16X 细 HZK16V 繁 HZK24F 24x24 仿宋汉字打印点阵 一个汉字72Byte HZK24H 24x24 黑体汉字打印点阵 一个汉字72Byte HZK24K 24x24 楷体汉字打印点阵 一个汉字72Byte HZK24S 24x24 宋体汉字打印点阵 一个汉字72Byte HZK24T 24x24 宋体符号打印点阵 一个符号72Byte HZK32 32x32点阵字库,宋体 HZK40S 宋体汉字40x40,200字节每字 HZK40T 宋体符号40x40,200字节每字 HZK48S 宋体汉字,48x48,288字节每字 HZK48T 宋体符号,48x48,288字节每符号 ASC12 8x12 ASCII点阵 一个字符12Byte ASC16 8x16 ASCII点阵 一个字符16Byte ASC48 24x48 ASCII点阵 一个字符144Byte HZK12 16x12 宋体汉字点阵 一个汉字24Byte HZK14 16x14 宋体汉字点阵 一个汉字28Byte HZK16 16x16 宋体汉字点阵 一个汉字32Byte

【Java】HZK16汉字16*16点阵字库类

HZK16字库是符合GB2312国家标准的16×16点阵字库,HZK16的GB2312-80支持的汉字有6763个,符号682个。其中一级汉字有 3755个,按声序排列,二级汉字有3008个,按偏旁部首排列。HZK16字库里的16×16汉字一共需要256个点来显示,也就是说需要32个字节才能达到显示一个普通汉字的目的。我们在一些应用场合根本用不到这么多汉字字模,所以在应用时就可以只提取部分字体作为己用就可以了。我们知道一个GB2312汉字是由两个字节编码的,范围为。A1-A9为符号区,

weixin_45250848的博客 1421

利用java开发点阵字体显示系(ASCII码字库的显示)

读取ASCII字库信息,并显示出来的完整代码。程序支持字符串输入,输出以*为信息的点阵信息图,如:I Love Java!显示如下 **** **** **** ** ** ** ** **** ** ** ** **** ** ** ***** ** ** ***** ** **** ** ** **** **** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ******* ** ***** ** ** ***** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **** ** ** ** ** ** ** **** ** ** ** **** ******* ***** ** ***** **** *** ** ** *** ** **

明码

标题:明码汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16行,布局是:    第1字节,第2字节    第3字节,第4字节    ....    第31字节, 第32字...

一个吃水不忘挖井人的博客。希望能帮助到你 509

无人机VS地面机器人:用AirSim和Gazebo玩转ROS2仿真的5个实战场景对比

本文深度对比了ROS2生态中两大仿真工具AirSim和Gazebo在无人机与地面机器人应用中的表现。通过电力巡检、仓库调度、SLAM建图等5个实战场景,分析了两者在视觉保真度、物理精度、开发效率等方面的差异,并提供了跨平台协作的实用技巧,帮助开发者根据项目需求选择合适的仿真工具。

flink9streamer的博客 900

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 496

超级详细解析——字模

超级详细解析——字模 一、简介 汉字库: 即存储汉字的仓库。现在常使用的汉字库有 HZK16、HZK24、HZK32...即对应的16*16、24*24、32*32汉字点阵字库。16X16点阵方式是最基础的汉字点阵,存储一、二级汉字及符号8836个,需要 282.5 kB的容量;而32X32点阵存储8836个汉字,需要1.132MB存储容量。由上我们看出,字型库存储容量大是汉字信...

北漂周的专栏(微信:stchou_zst) 2140

手把手教你用MaxEnt+ArcGIS玩转物种分布预测

本文详细介绍了如何利用MaxEnt最大熵模型与ArcGIS软件进行物种分布预测。通过实战案例,从数据收集、环境变量处理、模型参数设置到结果可视化分析,手把手教你掌握生态位模型的核心流程。结合SDM toolbox插件,可高效完成数据预处理与高级空间分析,是生态学与保护生物学研究的实用指南。

weixin_29309475的博客 559

第九届蓝桥杯 b组 明码

标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。 16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。 一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。 把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节, 一共16行,布局是: 第1字节,第2字节 第3字节,第4字节 .... 第31字节, 第32字节 这道题目...

付某人的博客 955

comfyui从入门到精通二:提示词规则详解

《AI绘画提示词使用全指南》摘要: 本文系统解析AI绘画提示词的核心规则与实用技巧。关键点包括:1) 空格与下划线的本质差异,webui会自动转换但comfyui保留原格式;2) 数字与单词表达(如1girl/one girl)会导致风格变化;3) 三种权重控制方式(数值标注、括号嵌套、位置效应),其中数值标注最直观有效;4) 位置衰减公式揭示提示词排序对效果的影响权重。同时指出当前AI绘画仍存在角色一致性等更复杂的技术瓶颈。全文通过多组对比实验,为创作者提供从基础语法到高阶控制的完整解决方案。

ScottePerk的博客 1926

PCL Alpha Shapes平面点云边界特征提取【2026最新版】

alpha shapes算法用于平面点云的边界特征提取。博客长期更新,本文最近一次更新时间为:2026年4月20日。

点云侠的博客 27万+
上一篇: attrs.xml 中字段的意思。。。
下一篇: Gradle基础
biandroid
博客等级 码龄15年 3粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值