Programming 版 (精华区)
发信人: valley (天音), 信区: Programming
标 题: tc显示汉字程序
发信站: 哈工大紫丁香 (2003年09月01日19:52:51 星期一), 站内信件
首先你需要一个汉字字模的文件,UCDOS中就有各种字体和大小的文件
然后根据汉字内码找到字模,一个点一个点地画出来.代码如下
每个汉字占两个字节,分别为High 和 low,或区码 加 位码
国标规定,汉字共有94个区,每区94个汉字,前边有十四个区(或许是这个数)是数字
和符号等.共6375个字.
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#define HZROW 16 /* 16x16点阵汉字*/
#define HZCOL 16
#define HZSIZE 32
int main(void)
{
FILE *fp,*fpin,*fpout;
int i,j,k,m,bitold,bitnew;
int driver=VGA,mode=VGAHI;
char data[HZSIZE];
int dots[HZCOL][HZROW];
long address;
long high,low;
int count;
fp=fopen("hzk16.bin","rb"); /*字模文件*/
fpin=fopen("text.txt","rb"); /*要显示的汉字,国标码*/
fpout=fopen("hzcode.txt","w"); /*把点阵信息输出保存*/
if(fp==NULL) printf("error open file");
if(fpin==NULL) printf("error open file");
initgraph(&driver,&mode,"");
count=0;
cleardevice();
while(!feof(fpin))
{
high=fgetc(fpin);
low=fgetc(fpin);
if(high=='\n' || low=='\n')
{
high=fgetc(fpin);
low=fgetc(fpin);
}
address=((high-0xa1)*94+low-0xa1)*HZSIZE; /*计算公式*/
fseek(fp,address,SEEK_SET);
for(i=0;i<HZSIZE;i++) data[i]=fgetc(fp);
for(i=0;i<HZROW;i++)
for(j=0;j<HZCOL;j++)
{
bitold=0;
for(k=(HZSIZE-1);k>=0;k--)
{ bitnew=(data[k]>>7)&1;
data[k]=data[k]<<1;
data[k]|=bitold;
bitold=bitnew;
}
k=dots[j][i];
dots[j][i]=k<<1;
dots[j][i]=bitnew;
if(bitnew) putpixel(50+count*20+j,100+i,WHITE);
} /* j,i */
for(i=0;i<HZROW;i++)
{
fprintf(fpout,";----------\n");
fprintf(fpout,"DB ");
for(j=0;j<HZCOL;j++)
fprintf(fpout,"%d ",dots[i][j]);
fprintf(fpout,"\n\n");
}
count++;
}
getch();
closegraph();
fcloseall();
return 0;
}
【 在 wplxb (小兵) 的大作中提到: 】
: 如题
--
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┃
┃ TARGET LOCKED! MISSILE LAUNCHED! TARGET DESTROYED! ┃
┃ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
对不起,您所呼叫的爱情已关机或不在服务区内,请稍候再播。
※ 修改:·SwordLea 于 Jun 12 09:39:52 修改本文·[FROM: 202.118.246.241]
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.250.183]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.575毫秒