展开全部
/***********************************
C 程序得到汉字字模信息
***********************************/
#include <stdio.h>
#include <stdlib.h>
/**********************************
得到英文字符的字模信息,存入数组
参数:
c:要得到字模信息的字符指针
buffer[]:存储得到字模信息的数组
无返回值
***********************************/
void getAscCode(char *c,char buff[]) {
unsigned long offset;
FILE *ASC;/* 打开字库文件asc16 */
if((ASC = fopen("asc16","rb")) == NULL) {
printf("Can't open asc,Please add it\n");
getchar();
exit(0);
}
offset = *(c) * 16 + 1; /* 通过ascii码算出偏移量 */
fseek(ASC,offset,SEEK_SET);/* 将文件指针移动到偏移量的位置 */
fread(buff,16,1,ASC); /* 从偏移量的位置读取32个字节 */
printf("ASCII:%d,offset:%d \n\r",*c,offset);
}
/**********************************
功能:显示汉字串,每个以16×16格式。
参数:Hz:待显示的汉字串
c1:前景字符串
c2:背景字符串
返回值:无
***********************************/
void ShowHz(char *Hz,char *c1,char *c2) {
unsigned char qh,wh;
unsigned long offset;
char buff[32];
int i,j,k,m;
FILE *HZK;
/* 打开字库文件hzk16 */
if((HZK = fopen("hzk16","rb")) == NULL) {
printf("Can't open haz16,Please add it\n");
getchar();
exit(0);
}
for(m = 0; Hz[m]; m += 2) {
/* 区码 = 内码(高字节) - 160 位码 = 内码(低字节) - 160 */
qh = Hz[m] - 0XA0;/* 获取区码 */
wh = Hz[m + 1] - 0XA0;/* 获取位码 */
offset = (94 * (qh - 1) + (wh - 1)) * 32L;/* 获取该汉字在字库中偏移量 */
fseek(HZK,offset,SEEK_SET);/* 将文件指针移动到偏移量的位置 */
fread(buff,32,1,HZK);/* 从当前位置读取32个字节 */
for(i = 0;i < 16;i++) { /* 16×16点阵汉字,一共有16行 */
for(j = 0;j < 2;j++) { /* 横向有2个字节,循环判断每个字节 */
for(k = 0;k < 8;k++) { /* 每个字节有8位,循环判断每位是否为1 */
if(buff[2 * i + j] & (0x80 >> k)) /* 测试当前位是否为1 */
printf("%s",c1);/* 为1的显示为字符c1 */
else printf("%s",c2);/* 为0的显示为字符c2 */
}
}
printf("\n");/* 显示一行以后,换新行 */
}
printf("\n");/* 每个汉字间有一个空行 */
}
fclose(HZK);
}
/*****************************************
根据字模信息输出英文字符参数
mat:字模指针(一个半角字符点阵信息)
c1:字模中为1的点显示的字符,也就是前景字符
c2:字模中为0的点显示的字符,也就是背景字符
无返回值
******************************************/
void printAscChar(char *mat,char *c1,char *c2) {
int i,j;
for(i = 0;i < 16;i++) { /* 8x16的点阵,一共有16行 */
for(j = 0;j < 8;j++)/* 横向一个字节8位,依次判断每位是否为0 */
if(mat[i] & (0x80 >> j))/* 测试当前位是否为1 */
printf("%s",c1);/* 为1的显示为字符c1 */
else printf("%s",c2);/* 为0的显示为字符c2 */
printf("\n");/* 输完一行以后,进行换行 */
}
}
/******************************************
根据字模信息输汉字字符?参数:
mat:字模指针(一个全角字符或汉字信息)
c1:字模中为1的点显示的字符,也就是前景字符
c2:字模中为0的点显示的字符,也就是背景字符
无返回值?
*******************************************/
void printHzKChar(char *mat,char *c1,char *c2) {
int i,j,k;
for(i = 0;i < 16;i++) { /* 16x16点阵汉字,一共有16行 */
for(j = 0;j < 2;j++) { /* 横向有2个字节,循环判断每个字节的 */
for(k = 0;k < 8;k++) { /*每个字节有8位,循环判断每位是否为1 */
if(mat[2 * i + j] & (0x80 >> k)) /* 测试当前位是否为1 */
printf("%s",c1);/* 为1的显示为字符c1 */
else printf("%s",c2);/* 为0的显示为字符c2 */
}
}
printf("\n");/* 输完一行以后,进行换行 */
}
}
/********************************** * 主函数 ***********************************/
int main() {
char *CnStr = "网络";
/* 汉字占两个字节,前景字符和背景字符都要有两个英文字符或一个中文字符,否则字体将变形 */
char *prospect = "*";
char *background = " ";
ShowHz(CnStr,prospect,background);
return 0;
}
展开全部
除非有现成的库函数,否则你这个想法很难实现。
以我的经验,可能可行的方法是:将字符作为一个图片输入,然后以图像处理的方式识别里面黑色的像素点,然后在相应的位置上绘制星号。
不过这样和你的预想就不大一样了是吧?
以我的经验,可能可行的方法是:将字符作为一个图片输入,然后以图像处理的方式识别里面黑色的像素点,然后在相应的位置上绘制星号。
不过这样和你的预想就不大一样了是吧?
追问
这样的话要这么做,能具体说说吗
其实我就是想输出四个中文,但是一个一个字符打太麻烦了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用一个n*n方阵,0代表空,1代表*,这个方阵看起来像某个字符,如果你输入了这个字符,那就输出这个方阵,遇到0输入空格,遇到1输入*,这个方阵是要自己做的,这将会是个巨大的工程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-11-18
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询