图形模式下的汉字显示
我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include  void  main() {printf("我正在学习C语言!");}
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
  汉字显示的第一步是打开字库文件。 
  函数:  int  OpenHz( const   char   * Hz16Path); 功能:打开字库文件Hz16Pathint handle;  /**/ /*打开的字库文件指针*/ int  OpenHz( const   char   * Hz16Path) {return (handle=open(Hz16Path,O_RDONLY|O_BINARY));}  打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
  函数:  int  WrtHz16( int  x, int  y, int  z, int  color, char   * p); 功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16( int  x,  int  y, int  z, int  color, char   * p)
{
unsigned int i,c1,c2,f=0; /**//*x,y:write at (x,y);*/
int rec,i1,i2,i3; /**//*z:space between;*/
long l; /**//*color:txt color*/
char by[32]; /**//*p:HZ str*/
if( handle<0 ) return -1; while((i=*p++)!=0){
if(i>0xa1)
if(f==0){
c1=(i-0xa1)&0x07f;
f=1;
}
else{
c2=(i-0xa1)&0x07f;
f=0;
rec=c1*94+c2;
l=rec*32L;
lseek(handle,l,SEEK_SET);
read(handle,by,32);
for(i1=0;i1<16;i1++)
for(i2=0;i2<2;i2++)
for(i3=0;i3<8;i3++)
if(GetBit(by[i1*2+i2],7-i3))
putpixel(x+i2*8+i3,y+i1,color);
x=x+z+16;
}
}
return(x);
}
函数GetBit定义如下:
  函数:  int  GetBit(unsigned  char  c, int  n); 功能:取得汉字的点阵数据。
int  GetBit(unsigned  char  c, int  n)
{
return((c>>n)&1);
}
汉字显示结束,应该关闭字库文件。
void  CloseHz( void )
{
close( handle );
}
#include  " \Caic\Include\Hz.h "
#include 
#include  const   char *  Hz16Path  =   " \\UCDOS\\Hzk16. " ;
const   char *  HzStr  =   " 苦丁香C语言辅助学习软件 " ;
void  main() {
int gr=DETECT,gm;
initgraph(&gr,&gm,"\\Caic\\Bgi");
OpenHz( Hz16Path );
Wrt16Hz(20,20,4,RED,HzStr);
CloseHz();
getch();
closegraph();
} 显示24点阵及放大汉字
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
函数:  int  WrtHz24( int  x, int  y, int  z, int  color, int  m,\ int  n, char   * p); 功能:显示24点阵及放大汉字。
int  WrtHz24( int  x, int  y, int  z, int  color, int  m, int  n, char   * p)
{
unsigned int i,c1,c2,f=0; /**//*z: 汉字字符间的空格*/
int i1,i2,i3,i4,i5,rec; /**//*x,y: 先是位置(x,y)*/
long l; /**//*color:汉字颜色*/
char by[72]; /**//*m: x 方向的放大倍数*/
/**//*n: y 方向的放大倍数*/
if( handle<0 ) return -1; /**//*p: 显示汉字串*/ while((i=*p++)!=0){
if(i>0xa1)
if(f==0){
c1=(i-0xa1)&0x7f;
f=1;
}
else{
c2=(i-0xa1)&0x7f;
f=0;
rec=(c1-15)*94+c2;
l=rec*72L;
lseek(handle,l,SEEK_SET);
read(handle,by,72);
for(i1=0;i1<24*m;i1=i1+m)
for(i4=0;i4 for(i2=0;i2<=2;i2++)
for(i3=0;i3<8;i3++)
if(GetBit(by[i1/m*3+i2],7-i3))
for(i5=0;i5 putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
x=x+24*m+z;
}
}
return(x);
}  使用Wrt24Hz的例子:#include  " \Caic\Include\Hz.h "
#include 
#include  const   char *  Hz24Path  =   " C:\\Ucdos\\fnt\\hzk24s. "
const   char *  HzStr  =   " 苦丁香C语言辅助学习软件 " ;
void  main() {
int gr=DETECT,gm;
initgraph(&gr,gm,"\\Caic\\Bgi");
OpenHz( Hz24Path );
Wrt24Hz(20,20, /**//*先是在(x,y)*/
4, /**//*汉字间的空格为4*/
RED, /**//*用红色显示*/
2, /**//*x 方向放大2倍*/
4, /**//*y 方向放大4倍*/
HzStr); /**//*显示字符串*/
CloseHz();
getch();
closegraph();
}  


posted on 2006-03-02 21:57 Aween's Blog 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/aween/archive/2006/03/02/341560.html

图形模式下的汉字显示相关推荐

  1. 图形模式下“文章伪原创工具”出汉字来

    11月份,大哥要回桂林了.在回桂林前,文章伪原创工具V1.1帮他和他的同学们去中关村电子市场一口气买了三台电脑,当时最红火的电子市场是中关村电子市场,就是现在北大太平洋电脑商场所在的地方. hongj ...

  2. 360极速浏览器以及360安全浏览器在兼容模式下验证码图片显示不来,但是极速模式可以显示?

    问题 最近遇到一个验证码出不来的问题,在360极速浏览器以及360安全浏览器在兼容模式下验证码图片显示不来,效果如下: 这个验证码的代码元素如下,是一张图片,由接口提供的一个图片链接,返回的是文件流. ...

  3. Mac 下Qt 设计师模式下菜单栏不显示问题

    最近碰到一个Qt 设计师模式下的一个问题,由于以前在win10下不存在这个问题,也在网上找到了很多的解决方法试了都不可以,今天有捣鼓了很久发现是QMenuBar类中的一个函数设置问题,只要在构造函数中 ...

  4. 多屏幕刷新率(refresh rate)模式下的帧显示流水线

    给Android应用和游戏开发工程师的最新参考. 长时间以来,手机显示屏幕的刷新率一直是固定的60Hz. 从2019年开始,由于游戏等应用对响应速度的需求越来越高,越来越多的手机开始在高刷新率(90/ ...

  5. 解决Bootstrap网页在360安全浏览器兼容模式下无法正常显示问题

    最近在公司做一个功能挺简单的网站系统,我习惯性的用chrome浏览器进行调试,网站前端大量用了bootstrap,还为了讨好领导加了不少H5+CSS3效果.各种图表,一切进行的那么顺利.有一天领导说要 ...

  6. vue项目中,360浏览器兼容模式下部分页面显示不出来

    1.问题 在项目中引用了百度地图,但是在360浏览器的兼容模式下无法显示 兼容模式可能就是为了兼容IE7之前的网站代码 , 而非我们字面理解的'兼容'二字 2.解决 告诉浏览器最少使用IE11的内核去 ...

  7. Android在MTP模式下,只显示指定文件夹

    废话不多说,直切主题 如图: 修改文件夹在PC上的文件夹名: 在frameworks/base/media/java/android/mtp 下找到MtpProertyGroup.java源文件 在M ...

  8. Linux CentOS系统 图形模式下,鼠标键盘操作没有响应

    1.前言 最近在和同事一起在linux CentOS系统下部署项目,由于同事不知道执行了什么不当操作,改变了系统的权限(权限可能是被修改,也可能是被删除了),改变的权限有可能是用户权限,也可能是其它权 ...

  9. centos7如何安装samba-client_如何在基本图形模式下最小化全新安装CentOS 7?

    How to install CentOS 7 in basic graphics mode? 其实有图形安装界面的,而且会更简单些.但为什么我还要写这个呢?可能是因为闲得无聊吧..不过这个安装的很多 ...

最新文章

  1. jquery 实现仿QQ右下角弹出框
  2. C语言 读取字符串数组中的字符串并获取字符串的长度
  3. mysql 主从 cap_Mysql 主从同步 slave_sql_running 为no
  4. (三)linux之根文件系统的制作
  5. java不同类间调用数组_请问:JAVA中两个类中的方法都需要调用另一个类的数组进行对数组的初始化和调用。...
  6. mysql 5.7.13 mac_Mac 安装mysql 5.7.13版本 登录及改密码
  7. 双击程序后系统弹框“您无权访问此程序”的解决办法
  8. assert函数的作用
  9. 静态函数 静态变量和常量
  10. npm audit fix
  11. 预印本(Preprint)及出版商的投稿政策
  12. linux 改路由表 宕机,网管宕机,服务停止?别担心,解决方案来了
  13. 圆通快递单号yt开头_乡镇快递取件二次收费,四川省消委会点名这些快递公司...
  14. Akka-CQRS(9)- gRPC,实现前端设备与平台系统的高效集成
  15. MySQL 创库 查库 等基本操作
  16. 1到100号的灯开关问题
  17. ajax爬虫小案例(百度翻译)
  18. 基于java的宠物管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
  19. 读书笔记:《探索大脑的内部世界》
  20. 软件设计师(计算机系统)

热门文章

  1. Lombok优缺点和总结
  2. java的位移运算和如何通过位移运算来实现加减
  3. 为什么大家说 MySQL 数据库单表最大两千万?依据是啥?
  4. 明星直播频“翻车”,直播带货行业何去何从?
  5. 统计学---之样本方差与总体方差的区别
  6. unity项目是啥_黑曜石的“永恒项目”是使用Unity的最新Kickstarter项目
  7. iOS仿照Yahoo天气:油条天气
  8. Linux下解决CPU占用率100%问题的步骤
  9. 使用Minio构建文件服务
  10. 动态磅是怎么原理_动态地磅的原理及发展