目录: DOS下的点阵汉字 汉字的内码 汉字字模 汉字库文件 打印字库文件和HZK12

main()

{

unsigned char *s,*e="ABcd",*c="你好";

clrscr();

printf("English char =");

s=e;

while(*s!=0) /*C的字符串以0为结束符*/

{

printf("%3d,",*s);

s++;

}

printf("\nChinease char=");

s=c;

while(*s!=0)

{

printf("%3d,",*s);

s++;

}

getch();

}

再用TC输入*.txt打开运行,看见了没有,那些数值即英文和汉字的各字节内码。

而中文的“你”在字模中却是这样记载的:

在硬件系统内,英文的字模信息一般固化在ROM里,即使在没有进入系统的CMOS里,也可以让你看到英文字符。而在DOS下,中文的字模信息一般记录在汉字库文件HZK16里。

了解字母和汉字是按字 模位信息显示的原理后,那如何得到汉字的字模信息呢?难道要我们自己去做?NO。DOS前辈们经过艰辛的努力,将制作好的字模放到了一个个标准的库中以免 去后辈的麻烦,这就是点阵字库文件。一般我们使用16*16的点阵宋体字库,所谓16*16,是每一个汉字在纵、横各16点的区域内显示的。不过后来又有 了HZK12、HZK24,HZK32和HZK48字库及黑体、楷体和隶书字库。虽然汉字库种类繁多,但都是按照区位的顺序排列的。前一个字节为该汉字的 区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:94*(区号-1)+ 位号-1。减1是因为数组是以0为开始而区号位号是以1为开始的。这仅为以汉字为单位该汉字在汉字库中的位置,那么,如何得到以字节为单位得到该汉字在汉 字库中的位置呢?只需乘上一个汉字字模占用的字节数即可,即:(94*(区号-1)+位号-1)*一个汉字字模占用字节数,而按每种汉字库的汉字大小不同 又会得到不同的结果。以16*16点阵字库为例,计算公式则为:(94*(区号-1)+(位号-1))*32。汉字库文该从该位置起的32字节信息即记录 了该字的字模信息。

汉字库文件

了解点阵汉字及汉字库的构成原理后,显示汉字就变得简单。以16*16点阵字库为例,通常的方法是:将文件工作指针移到需要的汉字字模处、将汉字库文件读入一2*16数组再用for循环一位位地显示。以使用VGAHI模式显示“我”字为例,程序如下:#include "graphics.h"

#include "stdio.h"

main()

{

int i=VGA,j=VGAHI,k;

unsigned char mat[16][2],chinease[3]="我";

FILE *HZK;

if((HZK=fopen("hzk16","rb"))==NULL)

exit(0);

initgraph(&i,&j,"");

i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*获得区码与位码*/

fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET);

fread(mat,32,1,HZK);

for(j=0;j<16;j++)

for(i=0;i<2;i++)

for(k=0;k<8;k++)

if(mat[j][i]&(0x80>>k)) /*测试为1的位则显示*/

putpixel(i*8+k,j,WHITE);

getch();

closegraph();

fclose(HZK);

}怎么样?只要掌握了正确的方法,显示汉字并不复杂。

如果你有UCDOS的 HZK24S(宋体)、HZK24K(楷体)或HZK24H(黑体),你还可以使用不同字体的大字模汉字了。HZK24系列是24*24的点阵字库,每字 模占用3*24字节。如果你按照HZK16的显示方法的话,你会看到......呵呵,字被放倒了。这是因为该类字库与一般的汉字库不同,这类大字模汉字 库是专供打印的打印字库,为了打印的方便将字模都放倒了,你使用时,只要将字模的位信息纵横转置显示即可。例如你如果定义为mat[24][3]则应该这 样输出:for(i=0;i<24;i++)

for(j=0;j<24;j++)

if((0x80>>i%8)&mat[j][i/8]) /*转置显示*/

putpixel(j+x,y+i,color);还有一类字库HZK12,虽然属于标准字库类型,但如果你将它的字模 当作12*12位计算的话,根本无法正常显示汉字。因为字库设计者为了使用的方便,字摸每行的位数均补齐为8的整数倍,于是实际该字库的位长度是 16*12,虽然每行都多出了4位,但这4位都是0(不显示),并不影响显示效果。

python获取中文字体点阵坐标_点阵汉字显示 - freecamel的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. python羊车门问题_羊车门问题 - osc_wq8j2a9a的个人空间 - OSCHINA - 中文开源技术交流社区...

    题目描述:有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么.参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择. ...

  2. 关联规则可视化python语言_关联规则可视化 - 猪猪daxia的个人空间 - OSCHINA - 中文开源技术交流社区...

    关联规则挖掘是一种流行的数据挖掘方法,在R语言中为扩展包arules.然而,挖掘关联规则往往导致非常多的规则,使分析师需要通过查询所有的规则才能发现有趣的规则.通过手动筛选大量的规则集是费时费力.在本 ...

  3. python遗传算法最短路径问题有几种类型_遗传算法求最短路径 - osc_tn8uhjgi的个人空间 - OSCHINA - 中文开源技术交流社区...

    实例描述 配送中心数为 $1$,客户数 $k$为 $8$,车辆总数 $m$为 $2$:车辆载重皆为 $8$ 吨:各客户点需求为 $g(i = 1, 2, ... , 8)$(单位为吨),已知客户点与配 ...

  4. python 白盒测试_白盒测试教程 - 颜丽的个人空间 - OSCHINA - 中文开源技术交流社区...

    总共贴了39节,后续还有很长,共122节,文章名为'白盒测试教程' 1.白盒测试概念 2.测试覆盖标准 3.逻辑驱动测试 4.基本路径测试 白盒测试概念 1.白盒测试也称结构测试或逻辑驱动测试,是一种 ...

  5. python设计模式理解_如何理解设计模式 - PythonJsGo的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.设计模式是什么? 设计模式是软件设计中常见问题的典型解决方案. 它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题.设计模式与方法或库的使用方式不同, 你很难直接在自己的程序 ...

  6. python变量无需指定类型对吗_Python变量类型 - osc_3rgq3dae的个人空间 - OSCHINA - 中文开源技术交流社区...

    变量存储在内存中的值,这就意味着在创建变量时会在内存开辟一个空间. 基于变量的数据类型,解析器会分配指定内存,并决定什么数据可以被存储在内存中. 因此变量可以指定不同的数据类型,这些变量可以存储整数. ...

  7. lua 区间比较_自然区间匹配算法 - borey的个人空间 - OSCHINA - 中文开源技术交流社区...

    什么是自然区间? 每一个单位都可以顺序访问的区间就称之为自然区间. 什么是自然区间匹配? 很多时候需要验证一个值,这个值的粒度很小或者说是异构的(从另外的模块获取的).配置这个值是否正确,我们通常会设 ...

  8. mysql连库串_数据库连接串整理 - osc_ac5z111b的个人空间 - OSCHINA - 中文开源技术交流社区...

    常用JDBC驱动与连接字符串 MySQL driver:com.mysql.jdbc.Driver url:jdbc:mysql://localhost:3306/mydb MySQL url格式:j ...

  9. php面试题 优信二手车_分布式定时任务对比 - sharedCode的个人空间 - OSCHINA - 中文开源技术交流社区...

    分布式定时任务 1. 什么是分布式定时任务 把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式.叫做分布式定时任务. 2. 常见开源方案 elastic ...

最新文章

  1. Android Studio查看代码行数和删除注释空行等
  2. Struts框架的入门使用
  3. 数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份...
  4. VTK:Utilities之ColorTransferFunction
  5. 字符串固定长度 易语言_易语言宽字符数据类型怎么设置
  6. Infor与Marketo®合作,帮助全球企业实现客户体验变革
  7. python tkinter treeview 高亮_满满的成就感~如何用python让你的想法拥有可操作性?(一)...
  8. 启动/关闭Spring boot服务脚本
  9. 德国高级码农可赚年薪20万,但他们不在乎钱
  10. atitit 新特性与趋势管理的艺术 v2 s52.docx 1. lang语言系列 java node.js php 2 1.1. Atitit js es5 es6新特性 attilax总结
  11. Excel批量生成minitab图表(自动化)
  12. oracle监听防止连接风暴,Oracle Listener 监听风暴处理
  13. 微型计算机及接口技术笔记,2010年自考微型计算机及其接口技术笔记串讲
  14. 某班题库技术分析(1)
  15. OpenCV学习01-加载、修改、保存图像
  16. 阿里云-云开发平台计算篇——加强应用本身的计算能力
  17. 移动软件开发-设计app首页
  18. msdn i tell you网址及下载系统详细步骤
  19. 快速计算delay函数中for循环延时程序占用的时间
  20. 互联网站规划与设计.txt

热门文章

  1. Regex 正则零宽断言
  2. 最常见的HTTP错误
  3. 『物理社工』五一回家的“小插曲”
  4. VS.NET 2005中实用的默认键
  5. Updater Application Block v1.0 翻译文档目录
  6. ubuntu 无法进入startx_Ubuntu无法进入图形化界面(报错/dev/sda1:clean的解决)
  7. python登录接口代码_(转载)Python 的 OAuth 登录接口 python-oauth2
  8. nema0183 java解析_NEMA 0183 语句解析
  9. mysql的limit和or_面试官:谈谈MySQL的limit用法、逻辑分页和物理分页
  10. MyEclipse、eclipse代码自动补全