c语言点阵字库12*16,用C语言编程16点阵字库
#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点阵字库相关推荐
- c语言中字符 12是多少,c语言中字符串的讲解(DOC可编).doc
c语言中字符串的讲解(DOC可编).doc 第一部分:字符串的概念 ---字符串:用双引号引起来的一串字符.在C语言,系统将自动的为字符串添加一个结束标志\0 ,该结束标志不作为字符串的实际长度,但作 ...
- 安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级级考试真题C语言2012年12月.doc...
安徽省计算机等级级考试真题C语言2012年12月,安徽省c语言二级考试,安徽省公务员考试真题,安徽省遴选考试真题,计算机等级二级c语言,c语言二级考试真题,江苏省计算机等级真题,安徽省二级c语言,计算 ...
- 16 16点阵c语言程序,用C语言编程16点阵字库
用C语言编程16点阵字库 2007-07-31 12:28 #include #include #include #include #include #include #include #define ...
- 安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级二级考试真题C语言2012年12月...
安徽省计算机等级二级考试真题C语言2012年12月 2012年下半年全国高等学校(安徽考区) 计算机水平考试试卷 (二级 C语言程序设计) 一.单项选择题(每题1分,共40分) 1.微型机的中央处理器 ...
- 【历史上的今天】10 月 12 日:C 语言之父逝世;西门子诞生;乔布斯推出 NeXT 电脑
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 10 月 12 日,历史上的这一天,哥伦布发现了"新大陆",在他发现的这片美洲上 ...
- mysql配置kodi16.1_kodi中文包|kodi 16.1中文语言包下载 附插件使用教程 - 121下载站...
kodi是一款强在的视频播放器,适用于本地视频.音频的播放,并且支持流媒体视频播放.小编提供的kodi16.1中文插件主要用于解决软件打开后是英文的问题,安装这个插件后就会变成中文了. kodi 16 ...
- 高通针对对讲机输入法的字库解决方案 — 支持多国语言字库,多字号字库;...
数字对讲机通信的优势非常明显,以直通模式为例,DMR采用双时隙工作时,其中一个时隙用来通话.发送短信和传送图像,另一个时隙则可用作控制信道使用,这个时隙可对传输的业务进行监视.暂停.遥毙.强插等控制, ...
- %3c大自然的语言%3e竺可桢题目,[转载]16 大自然的语言 竺可桢
16 大自然的语言 竺可桢 教学目标: 1.整体感知课文,能按照要求筛选相关信息并概括文章要点. 2.理清文章的说明顺序,探究事理说明文的写作技巧. 3.揣摩语言,体会本文语言准确严谨.生动优美的特点 ...
- 西工大16春c语言程序,谋学网西工大16春《C语言程序设计》平时作业答案
西工大16春<语言程序设计>平时作业 一.答案来源(谋学网www.mouxue.com)(共 3 道试题,共 9 分.) 1. 程序注释是由( )所界定的文字信息组成的. . /* . ...
- 安徽科技学院 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)
- Genomes correction and assembling - Present methods and tools
- 网站SEO优化该如何选择适合的关键词优化?
- 为什么 Linux的开发者要转到Windows 10 平台!
- 【控制】《多无人机协同控制技术》周伟老师-第1章-无人机协同控制技术概述
- nylgacm_1057_寻找最大数(三)
- 通过自定义资源扩展Kubernetes
- Android 多线程之几个基本问题
- python输入一个数组输出24进制式的时间_4.4 用于数组的文件输入输出 线性代数...
- 190411每日一句
- Photoshop如何把图片转为RGB颜色模式
- 学java用不用学ps_【No935】零基础学习从入门到精通Ps课程
- html5 LivePlayer 实时播放rtmp
- Java Web概述-练习题
- SEDA(Staged Event-Driven Architecture)
- html使用javascript实现图片滚动无缝拼接
- Facebook Surround360 学习笔记--(4)色彩/视差不一致问题
- Android-SQLite数据库实例,Android的Io模型你了解多少
- 计算机联锁系统的设计分析,城市轨道交通计算机联锁系统的设计及实现
- 从采矿到计算机,尘封的跨考经验分享
热门文章
- 安卓优雅的svg实践绚丽效果
- 数据挖掘和机器学习之间,主要有什么区别和联系?
- 手机端车牌识别软件下载
- pdf加水印方法,快速给pdf加水印
- 最新!Photoshop 2022 (ps2022)中文
- mysql5.7 64位下载_MySQL5.7下载-MySQL数据库5.7下载 v5.7.22.1官方版(32位/64位)--pc6下载站...
- Oracle RAC详解
- 组态王c语言延时1秒,(组态王软件详细教程第三讲让画面动起来.doc
- 在线极限词,敏感词,违禁词查询工具
- 校园网 显示ldap服务器连接不上,客户端无法连接到LDAP服务器