汉字串显示
程序员文章站
2022-03-13 09:07:17
实现任意汉字串的屏幕滚动显示,汉字为横排方向,从上到下滚动。目录前言一、机内字模1. 点阵类型2. 矢量类型二、使用步骤1.引入库2.读入数据总结前言当前计算机汉字输入输出 / 汉字字形输出一、机内字模1. 点阵类型用点的虚实表示汉字的轮廓,每个汉字一般都用为 16x16 或 24x24 个点来表示。若把每一个字都用16x16个点表示,这些字组成一个库,叫16x16点阵字库。该类型虽简单,但明显的缺点就是存储空间大、放大会失真。2. 矢量类型记录汉字字形轮廓信息中的关键点,...
实现任意汉字串的屏幕显示。
前言
- 当前计算机汉字输入输出 / 汉字字形输出
- 看任务,首先要做的是得到汉字串,下面开始讨论。
一、机内字模(即汉字串的表示形态)
1. 点阵类型
用点的虚实表示汉字的轮廓,每个汉字一般都用为 16x16 或 24x24 个点来表示。如下图。若把每一个字都用16x16个点表示,这些字组成一个库,叫16x16点阵字库。
该类型虽简单,但明显的缺点就是存储空间大、放大会失真。
2. 矢量类型
记录汉字字形轮廓信息中的关键点,经过数学运算输出字形。也就是平时输入法输出的字体。
缺点是需要计算。
- 任务中提到“屏幕显示”,这里考虑“点阵类型”。
二、每个汉字的点
首先,可以通过看下面这个链接的内容 HZK16汉字16*16点阵字库的使用及示例程序 介绍任务需要用到的hzk.dat。(讲得太好了555)
这里只摘取其中最重要的绝对偏移位置计算:
offset=(94*(区码-1)+(位码-1))*32
其中,区码 = 汉字的第一个字节-0xA0;位码 = 汉字的第二个字节-0xA0。(一个汉字占两个字节)
代码如下(示例):
import struct
def RetHZOffset(HZ):
HZs=HZ.encode("gbk") #传成字节
HZOffset=32*((HZs[0]-0xa0-1)*94+(HZs[1]-0xa0-1)) #偏移量计算
return HZOffset
HZ="你"
I=open("hzk.dat","rb") #字节读取
Offset=RetHZOffset(HZ) #传入汉字,返回起始点位置
I.seek(Offset,0)
Dot=I.read(32) #依次取32位
I.close()
DotInfo=struct.unpack("32B",Dot) #可以理解成 “串起来”
for i in range(0,32):
#print(DotInfo[i])
for j in range(0,8): #一字节8位
if ( (0x80>>j) & DotInfo[i] ) != 0:
print("*",end='')
else:
print(" ",end='')
if i%2==1: #16位为一行,换行
print("\n",end='')
结果如下:
总结
汉字串的屏幕显示是为实现汉字屏幕滚动显示做准备。
矢量类型的汉字显示较复杂,以后讨论。
代码一定不是最简的,文章内容如有错还望指出,谢谢~
@author: RUNT
本文地址:https://blog.csdn.net/weixin_45792211/article/details/113965909