| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1797 人关注过本帖, 1 人收藏
标题:[分享]TC2.0 下汉字的显示
取消只看楼主 加入收藏
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
结帖率:100%
收藏(1)
 问题点数:0 回复次数:2 
[分享]TC2.0 下汉字的显示
我这里是以16*16字模库说明的.
先说明一下原理:
所谓的16*16是一个汉字是存放格式:
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
总共16行16列,每一行占二个字节的空间,
每一个字节的的每一位是0表示不显示,1表示显示.

那如何得到汉字的字模信息呢?难道要我们自己去做?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字节信息即记录了该字的字模信息。
搜索更多相关主题的帖子: 汉字 分享 字模 原理 格式 
2007-04-13 22:01
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
我可以给出一个例程序:
#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); /*读取一个32个字节长度的信息到mat中*/

/*得到字模后,显示汉字*/
 for(j=0;j<16;j++)
  for(i=0;i<2;i++)
  for(k=0;k<8;k++)
/*扫描这个字节的每一位,如果是1则显示一个点,否则不显示*/
   if(mat[j][i] & (0x80>>k))/*0x80相当于:10000000 和字节作与运算时
如果最高位是1则与运算的结果是1,如果是0则与运算结果为0
0x80>>k是向右移位,当k==1时右移结果:01000000再与运算
如此循环完这个字节*/
   putpixel(i*8+k,j,RED);
getch();
 closegraph();
 fclose(HZK);
}
/*由于刚才上传hzk16字库不成功,要自己下,如果下不到
发信息到zhaoxufeng9997@126.com 我会发给你的*/

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-04-13 22:14
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

谢谢!


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-04-14 17:40
快速回复:[分享]TC2.0 下汉字的显示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021480 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved