中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-19 05:12
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 显示汉字的源程序 查看 2,753 回复 28
16 发表于 2003-10-14 00:00 ·  中国 广东 汕头 电信
银牌会员
★★★
积分 1,451
发帖 446
注册 2002-10-20 00:00
23年会员
UID 29
性别 男
状态 离线
以下是引用QB45在2003-10-14 19:13:07的发言:
pfox, 你发的字库文件我已经分析过了,源程序如下所示,实际上这不是一个16*15 的点阵字库,而是14*14的点阵字库。由于你的误导,让我走了不少弯路!不知你从那里弄来的这个字库文件!他的顺序是按偏旁部首排列的!


谢谢你。在是台湾国乔的一个字库。
17 发表于 2003-10-14 00:00 ·  中国 湖北 武汉 联通
高级用户
★★
积分 677
发帖 194
注册 2003-09-13 00:00
22年会员
UID 9778
性别 男
状态 离线
你发的et3中文系統的16*15(還是14*14呢?...)的点阵字库文件
我已经分析过了,源程序如下所示,实际上这不是一个16*15 的点阵字库,而是15*15的点阵字库。不知你从那里弄来的这个字库文件!字库的顺序与Pfox发的点阵字库文件一样是按偏旁部首排列的,不过Pfox发的点阵字库文件里面包含拼音、数学等特殊符号而你的这个没有!源程序与上面一个差不多,你的另外的两个字库我没有分析,估计也是差不多的,你自己把我的这个源程序改写一下分析分析试试看吧!
下面是源程序
input "请输入16*15点阵字库的完整的路径与文件名_ ",file$
OPEN file$ FOR BINARY AS #1
SCREEN 12
FOR i1 = 0 TO 30
x0 = 0
FOR i = 1 TO 42
SEEK #1, (i - 1 + i1 * 42) * 30 + 1
zimo$ = INPUT$(30, 1)
num = 1
y0 = i1 * 15
FOR y = 0 TO 14
chr1$ = MID$(zimo$, num, 1)
num = num + 1
chr2$ = MID$(zimo$, num, 1)
num = num + 1
chr3$ = chr2$ + chr1$
LINE (x0, y0 + y)-STEP(14, 0), 7, , CVI(chr3$)
NEXT y
x0 = x0 + 15
NEXT i
NEXT i1
end
18 发表于 2003-10-15 00:00 ·  中国 香港
管理员
★★★★
專業島民
积分 4,869
发帖 1,633
注册 2002-12-10 00:00
23年会员
UID 465
性别 男
状态 离线
以下是引用QB45在2003-10-14 21:38:15的发言:
你发的et3中文系統的16*15(還是14*14呢?...)的点阵字库文件
      我已经分析过了,源程序如下所示,实际上这不是一个16*15 的点阵字库,而是15*15的点阵字库。不知你从那里弄来的这个字库文件!字库的顺序与Pfox发的点阵字库文件一样是按偏旁部首排列的,不过Pfox发的点阵字库文件里面包含拼音、数学等特殊符号而你的这个没有!源程序与上面一个差不多,你的另外的两个字库我没有分析,估计也是差不多的,你自己把我的这个源程序改写一下分析分析试试看吧!
下面是源程序
input "请输入16*15点阵字库的完整的路径与文件名_  ",file$
OPEN file$ FOR BINARY AS #1
SCREEN 12
FOR i1 = 0 TO 30
    x0 = 0
    FOR i = 1 TO 42
        SEEK #1, (i - 1 + i1 * 42) * 30 + 1
        zimo$ = INPUT$(30, 1)
        num = 1
        y0 = i1 * 15
        FOR y = 0 TO 14
            chr1$ = MID$(zimo$, num, 1)
            num = num + 1
            chr2$ = MID$(zimo$, num, 1)
            num = num + 1
            chr3$ = chr2$ + chr1$
            LINE (x0, y0 + y)-STEP(14, 0), 7, , CVI(chr3$)
        NEXT y
        x0 = x0 + 15
     NEXT i
NEXT i1
end
這個是震漢的字型...好像真的是16*15呢...
這個是錄進的16*16字型...可以用16*16.bas再顯示字形.....可是不對字...
我的網站:http://mw16.2ya.com/ 我的網誌: http://scrappedblog.blogspot.com/
~
我的Winamp正在播放的歌曲:
19 发表于 2003-10-15 00:00 ·  中国 湖北 武汉 联通
高级用户
★★
积分 677
发帖 194
注册 2003-09-13 00:00
22年会员
UID 9778
性别 男
状态 离线
你说的:“這個是震漢的字型...好像真的是16*15呢...”
如果你用的是我上面的那个程序没作改动的话,应该是15*15的点阵而不是16*15的点阵字库,因为16*15无需单独做一个字库,除非是游戏字库!在读取16*16的点阵字库的BAS程序中改一下算法少划一条线,不就是16*15的汉字了吗?当然说说容易!但是关键是要判断那条线对汉字的影响不大,从而去掉它!可以用判断大小的方式!你试试看阿!
请问,你怎么对这个东西有兴趣阿?

20 发表于 2003-10-16 00:00 ·  中国 陕西 西安 长安区 电信
初级用户
★★
忍者
积分 376
发帖 86
注册 2003-10-16 00:00
22年会员
UID 11361
性别 男
状态 离线
支持你!写的不错。只是好象这些汉字显示复杂了点,可以直接调用字库中的字象HZK16、HZK24打印模式,好象比这简单一些!我这样认为,也许各有所见吧!
以C语言软件开发为主:http://sunny1979.icpcn.com
21 发表于 2003-10-16 00:00 ·  中国 湖北 武汉 联通
高级用户
★★
积分 677
发帖 194
注册 2003-09-13 00:00
22年会员
UID 9778
性别 男
状态 离线
一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕.
在 UCDOS 的点阵字库 HZK16 中,字符点阵是按照汉字内码排列的,汉字的内码从一些图形字符开始,起始编码为 A1A1H,汉字内码第一位为区码,每区为 94 个汉字,第二位为每区内的编码,每个汉字的点阵为 16点*16点 共32字节,数据按第一行 1-8点,9-16点,第二行 1-8点,9-16点...排列,每位数据 1 为要显示点,0 为不显示点。所谓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循环一位位地显示.
而Roy和Pfox两位网友提供的字库是不能用这个计算公式来计算的,所以显示与你期望的结果不相符,要解决这个问题,就要知道它是怎么得到要显示汉字在字库中的位置的,我想应该有一份字库索引表这样的一个文件,你们找找看!如果没有就应该找找看台湾的汉字库结构是不是有自己的排列方式!
22 发表于 2003-10-25 00:00 ·  中国 湖南 长沙 电信
初级用户
★★
积分 255
发帖 54
注册 2003-10-24 00:00
22年会员
UID 11864
性别 男
状态 离线
呵呵,早在70年代BASIC可风光呢,当时的一些小机器(非PC机,长的挺象90年代的小霸的那种)的操作系统就有用BASIC写的。许多应用程序譬如Lotus报表处理程序的“草稿”就是用它实现的。大名鼎鼎的暴雪创始人在那时就是靠BASIC给一些电脑公司写小游戏赚大学生活费的。直到现在,BASIC都是使用者最多的语言之一,没别的,就因为它简单,好上手,且功能不弱。
当然,我也不是叫你抱住它不放,我也是从QB走向C的啊,现在我有时都会用它做些小程序回味回味^_^ 我也觉得你应该去学C,玩编程的就是得拿的起放的下,说实话,当初我从B走向C都踌躇了许久呢^_^ 但现在觉得没白干。
加油吧!!
23 发表于 2003-10-25 00:00 ·  中国 广东 中山 电信
初级用户
积分 175
发帖 25
注册 2003-10-23 00:00
22年会员
UID 11741
性别 男
状态 离线
请问你当时为什么要从basic到c呢?是因为速度的问题吗?
24 发表于 2003-10-27 00:00 ·  中国 湖南 长沙 电信
初级用户
★★
积分 255
发帖 54
注册 2003-10-24 00:00
22年会员
UID 11864
性别 男
状态 离线
原因比较多吧,速度是一方面,另外还有功能,灵活性等方面啦,当然,功能强是较大的咯^_^
25 发表于 2004-01-08 00:00 ·  中国 浙江 杭州 华数宽带
初级用户
积分 111
发帖 5
注册 2003-12-01 00:00
22年会员
UID 13634
性别 男
状态 离线
kk
26 发表于 2004-01-08 00:00 ·  中国 湖北 武汉 联通
高级用户
★★
积分 677
发帖 194
注册 2003-09-13 00:00
22年会员
UID 9778
性别 男
状态 离线
谢谢大家的鼓励和建议,我不想学C,要学就学汇编!
学C了对计算机也只是一知半解,都是用别人写好了的函数,没劲!!!!
27 发表于 2004-01-11 00:00 ·  中国 湖北 武汉 联通
银牌会员
★★★
积分 1,681
发帖 512
注册 2003-08-02 00:00
22年会员
UID 7953
性别 男
状态 离线
希望你做一个 800*600@75Hz 显示汉字 & 图片的 LIB
刷新率低, 看着实在难受。(除非是黑底白字)
Somehow somewhere I've got to choose.
No matter if it is win or lose.
28 发表于 2004-01-12 00:00 ·  中国 湖北 武汉 联通
高级用户
★★
积分 677
发帖 194
注册 2003-09-13 00:00
22年会员
UID 9778
性别 男
状态 离线
你如果有资料我就可以做!
我没有这方面的资料!
29 发表于 2004-01-13 00:00 ·  中国 浙江 杭州 电信
银牌会员
★★
三生缘里笑红尘
积分 1,063
发帖 292
注册 2003-03-09 00:00
23年会员
UID 1073
性别 男
状态 离线
顶啊!我也想学C语言啊
论坛跳转: