学习各种大小点阵字体显示,参考网上资料,简单记录一下!

-----第一部分-----点阵字体数据的存放格式----

最常见的是16*16的点阵,意思是说每1行有16个点,一共有16行。由于1个点使用1个比特位来表示,如果这个比特位的值为1,则表示这个位置有点,如果这个比特位的值为0,则表示这个位置没有点。从而1行就需要16个比特位,而8个比特就是1个字节,也就是说,这个点阵字体中,一行的数据需要两个字节来存放。第1行的前8个点的数据存放在点阵数据的第1个字节里面,第1行的后面8个点的数据存放在点阵数据的第2个字节里面,第2行的前8个点的数据存放在点阵数据的第3个字节里面,然后后面的就以此类推了。这样我们可以计算16*16 的点阵出存放一个点阵总共需要32个字节。

再比如 16*8 的点阵,意思是说每1行有16个点,一共有8行。由于1个点使用一个比特位来表示,如果这个比特位的值为1,则表示这个位置有点,如果这个比特位的值为0,则表示这个位置没有点。从而1行就需要16个比特位,而8个比特就是1个字节,也就是说,这个点阵字体中,一行的数据需要2个字节来存放。第1行的前8个点的数据存放在点阵数据的第1个字节里面,第1行的后面8个点的数据存放在点阵数据的第2个字节里面,第2行的前8个点的数据存放在点阵数据的第3个字节里面,然后后面的就以此类推了。这样我们可以计算16*8的点阵出存放一个点阵总共需要16个字节。

再比如 8*8 的点阵,意思是说每1行有8个点,一共有8行。由于1个点使用1个比特位来表示,如果这个比特位的值为1,则表示这个位置有点,如果这个比特位的值为0,则表示这个位置没有点。从而1行就需要8个比特位,而8个比特就是1个字节,也就是说,这个点阵字体中,一行的数据需要1个字节来存放。第1行的数据存放在点阵数据的第1个字节里面,第2行的数据存放在点阵数据的第2个字节里面,然后后面的就以此类推了。这样我们可以计算 8*8的点阵出存放一个点阵总共需要8个字节。

再比如 24*24 的点阵,意思是说每1行有24个点,一共有24行。由于1个点使用1个比特位来表示,如果这个比特位的值为1,则表示这个位置有点,如果这个比特位的值为0,则表示这个位置没有点。从而1行就需要24个比特位,而8个比特就是1个字节,也就是说,这个点阵字体中,一行的数据需要3个字节来存放。第1行的前8个点的数据存放在点阵数据的第1个字节里面,第1行的中间8个点的数据存放在点阵数据的第2个字节里面,第1行的后面8个点的数据存放在点阵数据的第3个字节里面。第2行的前8个点的数据存放在点阵数据的第4个字节里面,第2行的中间8个点的数据存放在点阵数据的第5个字节里面,第2行的后面8个点的数据存放在点阵数据的第6个字节里面,然后后面的就以此类推了。这样我们可以计算 24*24的点阵出存放一个点阵总共需要72个字节。

最后也有比较特殊的字体,它不是8的倍数----

比如 12*12 的点阵,意思是说每1行有12个点,一共有12行。由于1个点使用1个比特位来表示,如果这个比特位的值为1,则表示这个位置有点,如果这个比特位的值为0,则表示这个位置没有点。从而1行就需要12个比特位,而8个比特就是1个字节,也就是说,这个点阵字体中,一行的数据需要1个半字节来存放。但是数据的读取一般都是以字节为单位,这样也是为了方便读字库。因此这里的格式是:第1行的前8个点的数据存放在点阵数据的第1个字节里面,第1行的后面4个点的数据存放在点阵数据的第2个字节的高4位里面,而第2个字节的低4位全部补0。第2行的前8个点的数据存放在点阵数据的第3个字节里面,第2行的后面4个点的数据存放在点阵数据的第4个字节的高4位里面,而第4个字节的低4位全部补0。然后后面的就以此类推了。这样我们可以计算 12*12的点阵出存放一个点阵总共需要32个字节。

这样我们可以得出一个 m*n 的点阵所占用的字节数为 (m+7)/8*n。

------------第二部分是显示字体在存储数据中的寻址--------

首先是如何在汉字库中寻址某个汉字的点阵数据了。要解决这个问题,首先需要了解汉字在计算机中是如何表示的。在计算机中英文可以使用 ASCII码来表示,而汉字使用的是扩展 ASCII 码,并且使用两个扩展 ASCII 码来表示一个汉字。一个 ASCII 码使用一个字节表示,所谓扩展 ASCII 码,也就是 ASCII 码的最高位是1的 ASCII 码,简单的说就是码值大于等于 128 的 ASCII 码。一个汉字由两个扩展 ASCII 码组成,第一个扩展 ASCII 码用来存放区码,第二个扩展 ASCII 码用来存放位码。在 GB2312-80 标准中,将所有的汉字分为94个区,每个区有94个位可以存放94个汉字,形成了人们常说的区位码,这样总共就有 94*94=8836 个汉字。在点阵字库中,汉字点阵数据就是按照这个区位的顺序来存放的,也就是最先存放的是第一个区的汉字点阵数据,在每一个区中又是按照位的顺序来存放的。在汉字的编码中,汉字区位码的存放是在扩展 ASCII 基础上存放的,并且将区码和位码都加上了32,然后存放在两个扩展 ASCII 码中。具体的说就是:

第一个扩展ASCII码= 128+32 + 汉字区码

第二个扩展ASCII码= 128+32 + 汉字位码

如果用char hz[2]来表示一个汉字,那么我可以计算出这个汉字的区位码为:

区码 = hz[0] - 128 - 32 = hz[0] - 160

位码 = hz[1] - 128 - 32 = hz[1] - 160。

这样,我们可以根据区位码在文件中进行寻址了,寻址公式如下:

汉字点阵数据在字库文件中的偏移 = ((区码-1) * 94 + 位码) * 一个点阵字模占用的字节数

英文使用的就是 ASCII码,其码值是0到127,寻址公式为:

英文点阵数据在英文点阵字库中的偏移 = 英文的ASCII码 * 一个英文字模占用的字节数。

android 点阵字体生成,点阵字体 ASCII码 汉字库 自我学习 简单总结相关推荐

  1. TextMeshPro中文字体生成和字体材质更换

    TextMeshPro中文字体生成和字体材质更换 中文字体生成: TextMeshPro是unity提供的相较源Text更加强大,高效的字体组件.但其有一个严重的缺点就是默认不支持中文.所以我们需要制 ...

  2. Android之自定义生成彩色二维码

    先导个zxing.jar包 下面是xml布局 activity_main.xml <RelativeLayout xmlns:android="http://schemas.andro ...

  3. ASCII码和汉字码

    国家标准汉字字符集GB2312-80共收集了共7445个汉字和图形符号,其中汉字6763个,分为二级,一级汉字3755个,二级汉字3008个. 汉字图形符号根据其位置将其分为94个"区&qu ...

  4. 如何知道输入的字符的ASCII码值呐?

    今天又发现一个有趣的小知识点,我怎样可以知道输入的字符的ASCII码值,很简单啦只需要一个小小的操作就可以了. 设c是字符,则int(c)就是其ASCII值,c+0也是. 那又怎么将ASCII码转换成 ...

  5. linux点阵字符显示字体颜色,点阵字体显示系列之一:ASCII码字库的显示

    起因: 早在阅读tslib源代码时就注意到里面有font_8x8.c和font_8x16.c两个文件(后来才得知,它们来自Linux内核,具体目录是./drivers/video/console),它 ...

  6. ttf字体取点阵字模

    ttf是矢量字体,freetype2可以解析并操作ttf格式字体,利用它可实现ttf字体提取点阵字模c源代码文件及头文件.软件界面如下: 字框为假象字符边框尺寸,字符尺寸为实际字符尺寸,通常一致即可, ...

  7. 织梦在线艺术字体转换生成平台网站源码

    简介: 织梦dedecms在线艺术字体转换生成平台网站源码 支持自己添加字体,在线艺术字体转换器,织梦内核艺术字体在线生成,在线转换,在线设计源码定制带全部数据版 本程序为客户定制 带全站数据 ,此源 ...

  8. unity3D用图片当做字体显示————点阵字体概念

    点阵字体是把每一个字符都分成16×16或24×24个点,然后用每个点的虚实来表示字符的轮廓.点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示. 字体结构 点阵字体也叫位图字体,其中每个字形都 ...

  9. openGL之API学习(一四六)矢量字体和点阵字体

    矢量字体(Vector font)中每一个字形是通过数学曲线来描述的,它包含了字形边界上的关键点,连线的导数信息等,字体的渲染引擎通过读取这些数学矢量,然后进行一定的数学运算来进行渲染.这类字体的优点 ...

最新文章

  1. Struts2中采用Json返回List对象数据为空解决方案
  2. postDelayed总结
  3. Day02-变量_数据类型和运算符
  4. cuda线程束原语 __shfl_xor、__shfl、__shfl_up()、__shfl_down()
  5. 学习使用的编程及调试技巧
  6. Windows Server 2008 R2 建立iSCSI存储的教程(图文) Windows iSCSI(转)
  7. linux中关于ssh实验,操作系统实验三linux的telnetftpssh的相关配置及验证
  8. IPCamera可以通过BackChannel进行对讲?
  9. 兼容最好的设为首页加入收藏代码
  10. 市政管理学试题及答案
  11. Spark开发环境的搭建(一)
  12. Android项目实战之高仿网易云音乐项目介绍
  13. 网站设计系列:网站易用性
  14. 李开复写给中国大学生的七封信(6/7)
  15. Postman+Newman:自定义测试报告展示内容
  16. mgc mysql_数据库之MySQL部署MGC方案(四)
  17. 激活休眠软件资产 提升企业软实力
  18. Java23种设计模式——11.结构型模式之享元模式
  19. oracle在哪些系统运行,Oracle运行操作系统命令
  20. 服务器要不要设置虚拟内存,服务器要不要设置虚拟内存

热门文章

  1. 使用Python实现键盘记录器和邮箱自动通知
  2. 3d学习笔记(四)——打飞碟小游戏
  3. 叶筱静受邀主持北大“2019数字新金融领袖峰会”圆桌论坛
  4. [教程]使用Lite MP4 Tool专业制作MP4(AVC)视频格式 - 指导教程
  5. 什么情形下计算机会休眠,什么是计算机休眠状态
  6. bzoj 1226 学校食堂
  7. 11、OpenGL - 混合(颜色混合)
  8. sublime text 3经典颜色主题-Soda
  9. Linux 绑定USB设备端口
  10. matlab求解零输入响应,基于matlab的零输入和零状态响应