首页 | 程式人生 | 原创下载 | 技术文档 | 留言我们 | 关于我们

一个在图形模式下显示汉字的C程序例子

作者: SZK8888        2003-11-05


/*注:编译运行时程序目录下需要 字库文件 HZK12,在UCDOS CCDOS 还有许多地方可以找到这个文件的*/

#include &ltdos.h&gt
#include &ltstdio.h&gt
#include &ltstdlib.h&gt
#include &ltgraphics.h&gt

void DISPLAY_HZ();

/*-------------------------------------------------------------------------*/

main()
{
int gdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,"");

DISPLAY_HZ(200,50,1,1,14,10,"Hello, world! 图形模式下显示汉字");
DISPLAY_HZ(60,100,2,2,28,13,"Hello, world! 图形模式下显示汉字");
DISPLAY_HZ(100,200,3,3,42,9,"图形模式下显示汉字");
DISPLAY_HZ(100,300,1,1,14,15,"注:图形模式下显示汉字是用画点的方法一点一点画出来的^_^");


getch();
closegraph();
}


/*-------------------------------------------------------------------------*/


/*在C程序中显示汉字的函数*/

void DISPLAY_HZ(
int cx, /*横坐标*/
int cy, /*纵坐标*/
int Width, /*宽的放大倍数*/
int Height, /*长的放大倍数*/
int w, /*字间隔*/
int color, /*汉字颜色*/
char *s /*汉字*/
)


{

FILE *fp;

char buffer[24]; /*buffer用来存储一个汉字*/

register m,n,i,j,k;

unsigned char qh,wh;

unsigned long offset; /*长整型 以支持长文件*/

char EC[2];


if ((fp=fopen("hzk12","rb"))==NULL) /*打开字库文件 HZK12*/
{
return;
}


while(*s) /*循环条件:指针为真*/
{

if(*s&lt0) /*是汉字的话*/
{
qh=*(s)-0xa0; /*汉字区位码*/

wh=*(s+1)-0xa0;

offset=(94*(qh-1)+(wh-1))*24L; /*计算该汉字在字库中偏移量*/


fseek(fp,offset,SEEK_SET);
/*offset(偏移量) SEEK_SET(起始位置为开头) 设置与fp相连接的文件位置指示器*/
/*使文件指针偏移*/

fread(buffer,24,1,fp);
/*从fp指向的流中,读取1各字段长度24字节的点阵字模(一个汉字),存入buffer中*/


/*将24位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字*/
for(i=0;i&lt12;i++) /*字模的12个行*/

for(n=0;n&ltHeight;n++) /**/

for(j=0;j&lt2;j++) /*每个行的个2字节*/

for(k=0;k&lt8;k++) /*每个字节8位*/

for(m=0;m&ltWidth;m++) /**/

if (((buffer[i*2+j]&gt&gt(7-k))&0x1)!=NULL)

putpixel(cx+8*j*Width+k*Width+m,cy+i*Height+n,color);

s+=2; /*因为一个汉字内码占用两个字节,所以s必须加2 */

cx+=w; /*字间隔*/

}

else
{
settextstyle(0,0,1);
setcolor(color);
EC[0]=*s;
EC[1]='\0';

outtextxy(cx,cy+3,EC);

cx+=w-6;
s++;

}


}


fclose(fp);

}

/*-------------------------------------------------------------------------*/


→返回←

红蜻蜓工作室版权所有
Copyright © 1999-2025 Reddragonfly & Studio All Rights Reserved.
如有任何问题及建议请留言红蜻蜓工作室