欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

汉字串显示

程序员文章站 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

相关标签: 日常复习 nlp