#include

#include

#include

#include

#include

#include

#include

#define GETADR(n,str) (str *) calloc (n,sizeof(str)) // 申请N个指定字符串长度的地址

#define W16 16

#define C16 32

unsigned char bit[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

FILE *fi;

char *dot,str[20];

main(int argc,char *argv[])

{

int i,j,nn,xc,yc,MaxX,MaxY,menul[1000];

int graphdriver=DETECT,graphmode;

if(argc!=2){ //检测是否输入了2个参数

puts("LT16??.N4>");

exit(0);

}

dot=GETADR(C16,char); //获取16个char长度的内存地址

fnmerge(str,"","",argv[1],".N4"); //建立str 为路径 ,文件名是 第一个参数.N4 的文件(这里可能有bug,str没初始化)

if((fi=fopen(str,"r"))==NULL){ //打开这个文件用于输入

puts("Can't open DATA.");

exit(0);

}

fscanf(fi,"%d",&nn); //读取一个整数

if(nn<=0||nn>1000) //这个数字必须在 0~1000之间

exit(0);

for (i=0;i

fscanf(fi,"%d",&menul[i]); //根据这个数字来决定继续读取的数字数量

fclose(fi);

if((fi=fopen("CLIB16.DOT","rb"))==NULL){ //打开 CLIB16.DOT 这个文件

puts("Can't open CLIB16.DOT");

exit(0);

}

initgraph(&graphdriver,&graphmode,""); // 初始化图形模式

MaxX=getmaxx(); // 获得屏幕最大坐标范围

MaxY=getmaxy();

xc=0;

yc=20;

for(j=0;j

i=readlibdot(menul[j]); //读取点阵数据

putchar16(xc,yc); //显示到对应的坐标系

xc+=20;

if(xc>MaxX-20){

yc+=20;

xc=0;

if(yc>MaxY-20){

getch();

clearviewport();

yc=0;

}

}

}

getch(); //按任意键继续

closegraph(); //关闭图形模式

}

readlibdot(int j)

{

int i0,j1,j2;

long order,k1;

j1=j/100;

j2=j-j1*100;

if(j1>=9)

j1=j1-6;

k1=94*j1+j2-95;

order=C16*k1;

fseek(fi,order,SEEK_SET);

i0=fread(dot,C16,1,fi);

return(i0);

}

putchar16(int bx,int by) //显示readlibdot 得到的汉字(保存在dot 里面)的每个象素点阵

{

int i,j,kk,k,x1,y1;

unsigned char marker;

kk=0;

y1=by;

for(i=0;i<16;i++,y1++){

for(j=0;j<2;j++){

x1=bx+j*8;

marker=*(dot+kk);

kk++;

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

if(!(marker&bit[k]))

continue;

putpixel(x1+k,y1,YELLOW);

}

}

}

return;

}

点阵字库

一般我们使用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循环一位位地显示。

#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);

}

c语言点阵字库12*16,用C语言编程16点阵字库相关推荐

  1. c语言中字符 12是多少,c语言中字符串的讲解(DOC可编).doc

    c语言中字符串的讲解(DOC可编).doc 第一部分:字符串的概念 ---字符串:用双引号引起来的一串字符.在C语言,系统将自动的为字符串添加一个结束标志\0 ,该结束标志不作为字符串的实际长度,但作 ...

  2. 安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级级考试真题C语言2012年12月.doc...

    安徽省计算机等级级考试真题C语言2012年12月,安徽省c语言二级考试,安徽省公务员考试真题,安徽省遴选考试真题,计算机等级二级c语言,c语言二级考试真题,江苏省计算机等级真题,安徽省二级c语言,计算 ...

  3. 16 16点阵c语言程序,用C语言编程16点阵字库

    用C语言编程16点阵字库 2007-07-31 12:28 #include #include #include #include #include #include #include #define ...

  4. 安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级二级考试真题C语言2012年12月...

    安徽省计算机等级二级考试真题C语言2012年12月 2012年下半年全国高等学校(安徽考区) 计算机水平考试试卷 (二级 C语言程序设计) 一.单项选择题(每题1分,共40分) 1.微型机的中央处理器 ...

  5. 【历史上的今天】10 月 12 日:C 语言之父逝世;西门子诞生;乔布斯推出 NeXT 电脑

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 10 月 12 日,历史上的这一天,哥伦布发现了"新大陆",在他发现的这片美洲上 ...

  6. mysql配置kodi16.1_kodi中文包|kodi 16.1中文语言包下载 附插件使用教程 - 121下载站...

    kodi是一款强在的视频播放器,适用于本地视频.音频的播放,并且支持流媒体视频播放.小编提供的kodi16.1中文插件主要用于解决软件打开后是英文的问题,安装这个插件后就会变成中文了. kodi 16 ...

  7. 高通针对对讲机输入法的字库解决方案 — 支持多国语言字库,多字号字库;...

    数字对讲机通信的优势非常明显,以直通模式为例,DMR采用双时隙工作时,其中一个时隙用来通话.发送短信和传送图像,另一个时隙则可用作控制信道使用,这个时隙可对传输的业务进行监视.暂停.遥毙.强插等控制, ...

  8. %3c大自然的语言%3e竺可桢题目,[转载]16  大自然的语言 竺可桢

    16 大自然的语言 竺可桢 教学目标: 1.整体感知课文,能按照要求筛选相关信息并概括文章要点. 2.理清文章的说明顺序,探究事理说明文的写作技巧. 3.揣摩语言,体会本文语言准确严谨.生动优美的特点 ...

  9. 西工大16春c语言程序,谋学网西工大16春《C语言程序设计》平时作业答案

    西工大16春<语言程序设计>平时作业 一.答案来源(谋学网www.mouxue.com)(共 3 道试题,共 9 分.) 1.  程序注释是由( )所界定的文字信息组成的. . /* . ...

  10. 安徽科技学院 2014-2015-2学期计算机14级12班《C语言程序设计II》期末考试

    Contest - 2014-2015-2学期计算机14级12班<C语言程序设计II>期末考试 Start time:  2015-07-03 19:05:00.0  End time:  ...

最新文章

  1. 没有什么不可能(1)
  2. Genomes correction and assembling - Present methods and tools
  3. 网站SEO优化该如何选择适合的关键词优化?
  4. 为什么 Linux的开发者要转到Windows 10 平台!
  5. 【控制】《多无人机协同控制技术》周伟老师-第1章-无人机协同控制技术概述
  6. nylgacm_1057_寻找最大数(三)
  7. 通过自定义资源扩展Kubernetes
  8. Android 多线程之几个基本问题
  9. python输入一个数组输出24进制式的时间_4.4 用于数组的文件输入输出 线性代数...
  10. 190411每日一句
  11. Photoshop如何把图片转为RGB颜色模式
  12. 学java用不用学ps_【No935】零基础学习从入门到精通Ps课程
  13. html5 LivePlayer 实时播放rtmp
  14. Java Web概述-练习题
  15. SEDA(Staged Event-Driven Architecture)
  16. html使用javascript实现图片滚动无缝拼接
  17. Facebook Surround360 学习笔记--(4)色彩/视差不一致问题
  18. Android-SQLite数据库实例,Android的Io模型你了解多少
  19. 计算机联锁系统的设计分析,城市轨道交通计算机联锁系统的设计及实现
  20. 从采矿到计算机,尘封的跨考经验分享

热门文章

  1. 安卓优雅的svg实践绚丽效果
  2. 数据挖掘和机器学习之间,主要有什么区别和联系?
  3. 手机端车牌识别软件下载
  4. pdf加水印方法,快速给pdf加水印
  5. 最新!Photoshop 2022 (ps2022)中文
  6. mysql5.7 64位下载_MySQL5.7下载-MySQL数据库5.7下载 v5.7.22.1官方版(32位/64位)--pc6下载站...
  7. Oracle RAC详解
  8. 组态王c语言延时1秒,(组态王软件详细教程第三讲让画面动起来.doc
  9. 在线极限词,敏感词,违禁词查询工具
  10. 校园网 显示ldap服务器连接不上,客户端无法连接到LDAP服务器