LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1376|回复: 10

LINUX系统下汉字显示问题

[复制链接]
发表于 2004-5-9 15:59:39 | 显示全部楼层 |阅读模式
本人在DOS下用TC实现汉字显示方法如下:
汉字库生成及汉字图形显示原理
1、汉字库的提取:
由于本次前期实验工作是在MS-DOS6.22平台下进行,没有汉字库。汉字库的生成在高版本的Windows下生成,而各汉字系统汉字库的组织方式不完全一致,字库码的计算公式也因汉字系统不同而有些差异。在此前期实验工作中,我使用以下此方法计算孩子的字库码。根据汉字的机内码运用公式“区位码=汉字机内码-0xa0a0”先计算出其区位码,再运用公式“字库码=(区码-1)×94+(位码-1)”计算出其字库码,也就是其偏移地址。知道汉字的字库码和存储一个汉字字形所用的字节数(简称字节数)后,运用计算公式“字形码字节偏移地址=字库码×(字节数/1个汉字字形)”计算出该汉字字形码(点阵信息)在字库中的偏移地址。移动文件指针至字库中该汉字的字节偏移处,并读取单位汉字字形占用的字节数。
实现方法:
(1)        汉字字库码的计算:
gb=(ch1-160)*100+ch2-160;
              x=gb/100;y=gb%100;
              p=((x-1)*94+y-1)*32;
(2)根据字库码获取该汉字的地址
fseek(fplib,addr,SEEK_SET);
2、建立一个我们所需的小型汉字库
   实现方法:
   将需要用到的汉字写到一个txt文件中,经过CRTLIB.EXE程序生成一个CCLIB.xx汉字库文件
3、从生成的小型汉字库提取汉字并显示字形信息。
   实现方法:
提取汉字并保存于文件CCLIB.xx中
      fwrite(&ch1,1,1,fplib);   
fwrite(&ch2,1,1,fplib);
            write(&s,72,1,fplib);
并编译生成CRTLIB.EXE可执行文件。
汉字的图形显示:
我们选择点阵字库来显示汉字的图形,点阵字库存储汉字点阵信息,我们只用到16×16,24×24两种点阵。16×16点阵是一种简易字形点阵,但字形不美观。其点阵是按横向设计的,共有32bytes。24×24点阵字形比较美观,主要用于打印。其每个汉字为72bytes,按照打印机的打印针头排列,为竖直方向,即一列有3bytes。汉字的显示过程就是把汉字的机内码转换为屏幕上的汉字字形点阵的过程。CRT控制模块接收汉字机内码,由字形检索程序检索程序把机内码转换为相应的汉字字模在汉字库中的地址。由此地址从字库中取出汉字字模,经缓冲区处理形成汉字字形码,经显示驱动程序把字形码显示在屏幕上。
实现方法:
定义outhz ()为从汉字库中输出汉字,img()为画点函数,oouthz()为向显示屏输出汉字函数。具体定义如下:
8×8点阵西文与数字:void   oouthz8(unsigned char  *,int,int,int,int,int,int);
void   outhz8(unsigned char  *,int,int,int,int,int,int);
void   img8(unsigned    char *,int,int,int,int);
16×16点阵汉字:void   oouthz16(unsigned char *,int,int,int,int,int,int);
void   outhz16(unsigned char *,int,int,int,int,int,int);
void   img16(unsigned    char *,int,int,int,int);
24×24点阵汉字:void   oouthz24(unsigned char *,int,int,int,int,int,int);
void   outhz24(unsigned char *,int,int,int,int,int,int);
void   img24(unsigned    char *,int,int,int,int);

试问,在LINUX下要如何实现这个汉字显示呢!?本人刚接触LINUX,很多都不懂,希望大家多多指导~~~
 楼主| 发表于 2004-5-9 16:20:53 | 显示全部楼层
我的意思是说,我们要做的设计由于工业硬件的要求(只有8M),加上LINUX汉化工作的烦琐与庞大,于是我们为了在软件系统不能太大的约束下摆脱庞大的汉字操作系统,避免因汉字系统而造成的不兼容问题,我们想利用从汉字库提取字模点阵信息的程序,并在图形方式下显示出汉字,试问达人下,该如何实现!?
发表于 2004-5-9 16:47:18 | 显示全部楼层
我不知道楼主的意思是在控制台下显示汉字还是在Xwindow下显示汉字,如果是作工业控制用,估计是在控制台下显示汉字吧。你的这些问题在zhcon中已经解决了。推荐你去看看它的源代码。
 楼主| 发表于 2004-5-9 21:11:59 | 显示全部楼层
版主能给个源代码的联结么!?谢了
 楼主| 发表于 2004-5-9 21:16:19 | 显示全部楼层
而且这个源代码的编译方法能与我另个同学用GTK所编译的界面能总控整合起来吗!?
发表于 2004-5-9 21:22:51 | 显示全部楼层
最初由 pgj787 发表
版主能给个源代码的联结么!?谢了


search zhcon-0.2.3.tar.gz
发表于 2004-5-10 19:08:00 | 显示全部楼层
最初由 pgj787 发表
而且这个源代码的编译方法能与我另个同学用GTK所编译的界面能总控整合起来吗!?

原来你是要在xwindow中显示汉字,这个问题已经造xlib的汉化解决了。
 楼主| 发表于 2004-5-11 15:03:59 | 显示全部楼层
只不过XLIB的汉化占用资源大吗?!我们这设计的硬件要求比较高,总的才给我们8M的空间。我本来是想自己建一个小型的汉字库,里面包含我们设计要用到的几个字就好了。
发表于 2004-5-11 22:22:01 | 显示全部楼层
ftft
8M能用GTK吗??????????????????///
发表于 2004-5-13 17:00:39 | 显示全部楼层
在linux下,你可以用svgalib,是比?底?的?形?,一般的?行版都有这??。cce就是用这??做的?端下的?字?示。你可以到soureforge.net上找cce的源?来?考,挺容易懂的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表