![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 14:05 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 显示汉字的源程序 |
| 可打印版本 3,396 / 28 |
| 第16楼 pfox | 发表于 2003-10-14 00:00 |
| 银牌会员 发帖 446 积分 1,451 | |
以下是引用QB45在2003-10-14 19:13:07的发言: 谢谢你。在是台湾国乔的一个字库。 |
|
| 第17楼 qb45 | 发表于 2003-10-14 00:00 |
| 高级用户 发帖 194 积分 677 | |
|
你发的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楼 Roy | 发表于 2003-10-15 00:00 |
| 管理员 发帖 1,633 积分 4,869 | |
以下是引用QB45在2003-10-14 21:38:15的发言:這個是震漢的字型...好像真的是16*15呢... ![]() 這個是錄進的16*16字型...可以用16*16.bas再顯示字形.....可是不對字... ![]() |
|
| 第19楼 qb45 | 发表于 2003-10-15 00:00 |
| 高级用户 发帖 194 积分 677 | |
|
你说的:“這個是震漢的字型...好像真的是16*15呢...”
如果你用的是我上面的那个程序没作改动的话,应该是15*15的点阵而不是16*15的点阵字库,因为16*15无需单独做一个字库,除非是游戏字库!在读取16*16的点阵字库的BAS程序中改一下算法少划一条线,不就是16*15的汉字了吗?当然说说容易!但是关键是要判断那条线对汉字的影响不大,从而去掉它!可以用判断大小的方式!你试试看阿! 请问,你怎么对这个东西有兴趣阿? |
|
| 第20楼 sunny1979 | 发表于 2003-10-16 00:00 |
| 初级用户 发帖 86 积分 376 | |
|
支持你!写的不错。只是好象这些汉字显示复杂了点,可以直接调用字库中的字象HZK16、HZK24打印模式,好象比这简单一些!我这样认为,也许各有所见吧!
|
|
| 第21楼 qb45 | 发表于 2003-10-16 00:00 |
| 高级用户 发帖 194 积分 677 | |
|
一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕.
在 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 |
| 初级用户 发帖 54 积分 255 | |
|
呵呵,早在70年代BASIC可风光呢,当时的一些小机器(非PC机,长的挺象90年代的小霸的那种)的操作系统就有用BASIC写的。许多应用程序譬如Lotus报表处理程序的“草稿”就是用它实现的。大名鼎鼎的暴雪创始人在那时就是靠BASIC给一些电脑公司写小游戏赚大学生活费的。直到现在,BASIC都是使用者最多的语言之一,没别的,就因为它简单,好上手,且功能不弱。
当然,我也不是叫你抱住它不放,我也是从QB走向C的啊,现在我有时都会用它做些小程序回味回味^_^ 我也觉得你应该去学C,玩编程的就是得拿的起放的下,说实话,当初我从B走向C都踌躇了许久呢^_^ 但现在觉得没白干。 加油吧!! |
|
| 第23楼 warm | 发表于 2003-10-25 00:00 |
| 初级用户 发帖 25 积分 175 | |
|
请问你当时为什么要从basic到c呢?是因为速度的问题吗?
|
|
| 第24楼 凌晨一点 | 发表于 2003-10-27 00:00 |
| 初级用户 发帖 54 积分 255 | |
|
原因比较多吧,速度是一方面,另外还有功能,灵活性等方面啦,当然,功能强是较大的咯^_^
|
|
| 第25楼 spirit | 发表于 2004-01-08 00:00 |
| 初级用户 发帖 5 积分 111 | |
|
kk
|
|
| 第26楼 qb45 | 发表于 2004-01-08 00:00 |
| 高级用户 发帖 194 积分 677 | |
|
谢谢大家的鼓励和建议,我不想学C,要学就学汇编!
学C了对计算机也只是一知半解,都是用别人写好了的函数,没劲!!!! |
|
| 第27楼 iceboy | 发表于 2004-01-11 00:00 |
| 银牌会员 发帖 512 积分 1,681 | |
|
希望你做一个 800*600@75Hz 显示汉字 & 图片的 LIB
刷新率低, 看着实在难受。(除非是黑底白字) |
|
| 第28楼 qb45 | 发表于 2004-01-12 00:00 |
| 高级用户 发帖 194 积分 677 | |
|
你如果有资料我就可以做!
我没有这方面的资料! |
|
| 第29楼 pizigao | 发表于 2004-01-13 00:00 |
| 银牌会员 发帖 292 积分 1,063 | |
|
顶啊!我也想学C语言啊
|
|
| 上一页 1 2 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |