700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言中中文字库 读取汉字库中的汉字

c语言中中文字库 读取汉字库中的汉字

时间:2020-12-17 20:13:41

相关推荐

c语言中中文字库 读取汉字库中的汉字

该楼层疑似违规已被系统折叠隐藏此楼查看此楼

一般在屏幕上显示汉字的时候需要汉字系统的支持,但需要自己显示汉字的时候,就需要自己读汉字字库文件,把字符点阵读出来,再用绘图的办法显示到屏幕上,本文是读UCDOS16点字库文件的示例。

在UCDOS的点阵字库HZK16中,字符点阵是按照汉字内码排列的,汉字的内码从一些图形字符开始,起始编码为A1A1H,汉字内码第一位为区码,每区为94个汉字,第二位为每区内的编码,每个汉字的点阵为16点*16点共32字节,数据按第一行1-8点,9-16点,第二行1-8点,9-16点...排列,每位数据1为要显示点,0为不显示点。汉字点阵数据在字库中的偏移量为((区码-A1H)*94+(区内编码-A1H))*32。

本程序为一个简单的例子,要显示的汉字在变量DISP_DATA中,且没有考虑汉字、英文混用的情况。

源程序:

;WriteinMay22,1996

;ByLuoYunBin-----

.286

LINE_CHAREQU210;在屏幕上第几行显示

COL_CHAREQU230;在屏幕上第几列显示

COLOR_CHAREQU0EH;显示颜色

CHARSEQU(offsetdisp_data_end-offsetdisp_data)/2

CODESEGMENT

ASSUMECS:CODE,DS:CODE

ORG100H

START:

jmpinstall

CC_FILEDB'C:\UCDOS\HZK16',0;字库文件名,用UCDOS的16点阵汉字库

HANDLEDW?;filehandle

DISP_DATADB'罗云彬';要显示的汉字

DISP_DATA_ENDEQUTHISBYTE

D_OPEN_ERRORDB'FileC:\UCDOS\HZK16notfound!',0dh,0ah,24h

install:

movax,3d00h;打开汉字库

movdx,offsetcc_file

int21h

jnbopen_ok

movah,9

movdx,offsetd_open_error

int21h

int20h

open_ok:

movhandle,ax

movsi,offsetdisp_data

movdi,offsetzi_buffer

movcx,chars

cld

ins2:

lodsb

movah,al

lodsb

callget_dots;读出汉字点针

loopins2

calldisp_cc;显示到屏幕

int20h

GET_DOTSPROC

pusha

subax,0a1a1h;汉字的内码从A1区开始

cwd

movdl,al;所以绝对开始区是内码-A1

moval,ah;点阵在字库中的位置为

cbw

movbl,94;((汉字码1-A1)*94+汉字码2-A1)*32

mulbl

addax,dx

movbx,32

mulbx

movcx,dx

movdx,ax

movax,4200h;移动读写指针到点阵数据位置

movbx,handle

int21h

movah,3fh

movcx,32

movdx,di

int21h

popa

adddi,32

ret

GET_DOTSENDP

DISP_CCPROC

movax,12h;640*480mode

int10h;设置640*480/16色显示模式

movcx,chars

movsi,offsetzi_buffer

movbx,col_char-20;BX=column

dh_lop0:

addbx,20;everycharcolumn+20

pushcx

movcx,16;l6lines/char

movdx,line_char;DX=startline

dh_lop1:

pushbx

pushcx

lodsb;16dots/line

movah,al

lodsb

movcx,16

dh_lop2:

shlax,1

pushax

pushbx

pushcx

jcdb_color

xoral,al;backcoloris0

jmpshortdb_draw

db_color:

moval,color_char

db_draw:

movah,0ch

movcx,bx

xorbh,bh

int10h

popcx

popbx

popax

incbx;inccolumn

loopdh_lop2

incdx;nextline

popcx

popbx

loopdh_lop1

popcx

loopdh_lop0

xorah,ah

int16h

movax,3

int10h

ret

DISP_CCENDP

ZI_BUFFEREQUTHISBYTE

CODEENDS

ENDSTART

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。