16點(diǎn)陣字庫(kù)查看,可查看16/24/32點(diǎn)陣字庫(kù)文件中的文字,并可將其轉(zhuǎn)換為C語(yǔ)言數(shù)組形式的文本文件,方便將其編入源程序中。
16×16點(diǎn)陣字庫(kù)
一般我們使用16*16的點(diǎn)陣宋體字庫(kù),所謂16*16,是每一個(gè)漢字在縱、橫各16點(diǎn)的區(qū)域內(nèi)顯示的.不過(guò)后來(lái)又有了HZK12、HZK24,HZK32和HZK48字庫(kù)及黑體、楷體和隸書字庫(kù).
雖然漢字庫(kù)種類繁多,但都是按照區(qū)位的順序排列的.前一個(gè)字節(jié)為該漢字的區(qū)號(hào),后一個(gè)字節(jié)為該字的位號(hào).
每一個(gè)區(qū)記錄94個(gè)漢字,位號(hào)則為該字在該區(qū)中的位置.
因此,漢字在漢字庫(kù)中的具體位置計(jì)算公式為:94*(區(qū)號(hào)-1)+位號(hào)-1.
減1是因?yàn)閿?shù)組是以0為開始而區(qū)號(hào)位號(hào)是以1為開始的.
這僅為以漢字為單位該漢字在漢字庫(kù)中的位置,那么,如何得到以字節(jié)為單位得到該漢字在漢字庫(kù)中的位置呢?
只需乘上一個(gè)漢字字模占用的字節(jié)數(shù)即可,
即:(94*(區(qū)號(hào)-1)+位號(hào)-1)*一個(gè)漢字字模占用字節(jié)數(shù),而按每種漢字庫(kù)的漢字大小不同又會(huì)得到不同的結(jié)果.
以16*16點(diǎn)陣字庫(kù)為例,計(jì)算公式則為:(94*(區(qū)號(hào)-1)+(位號(hào)-1))*32.
漢字庫(kù)文該從該位置起的32字節(jié)信息即記錄了該字的字模信息.
了解點(diǎn)陣漢字及漢字庫(kù)的構(gòu)成原理后,顯示漢字就變得簡(jiǎn)單.以16*16點(diǎn)陣字庫(kù)為例,
通常的方法是:
將文件工作指針移到需要的漢字字模處、將漢字庫(kù)文件讀入一2*16數(shù)組再用for循環(huán)一位位地顯示.
#include "graphics.h"
#include "stdio.h"
main()
{ int i=VGA,j=VGAHI,k;
unsigned char mat[16][2],chinease[3]="我";
FILE *HZK;
if((HZK=fopen("hzk16","rb"))==NULL)exit(0);
initgraph(&i,&j,"");
i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*獲得區(qū)碼與位碼*/
fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET);
fread(mat,32,1,HZK);
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
if(mat[j][i]&(0x80>>k)) /*測(cè)試為1的位則顯示*/
putpixel(i*8+k,j,WHITE);
getch();
closegraph();
fclose(HZK);