需要字模文件:ASC16 HZK16 放于上层根目录内(自己去下载。。。)
字模文件:
http://pan.baidu.com/netdisk/extractpublic?uk=656364533
1 /*********************************
2 * 程序名称:doodle777 的取字模程序
3 * 作 者:doodle777
4 * 邮 箱:duanxu@outlook.com
5 * 版 本 号:1.0
6 * 完成时间:2012-08-30-PM
7 * 说 明:需要字模文件:ASC16 HZK16 放于上层根目录内
8 *
9 **********************************/
10
11 #include<stdio.h>
12 #include<stdlib.h>
13 #include<conio.h>
14
15 #define ASC_16 16
16 #define HZK_16 16
17 #define MAXASC 8
18 #define MAXHZK 2
19
20 void PrintASCChar(
char * modelchar ,
char * forechar ,
char *
backchar);
21 void PrintHZKChar(
char * modelchar ,
char * forechar ,
char *
backchar);
22
23 void main()
24 {
25 int mode,number=
0;
26 char input;
27 char ascchar[MAXASC+
1]= {
0}, hzkchar[
2*MAXHZK+
1]= {
0};
28 char * asc_forechar, * asc_backchar, * hzk_forechar, *
hzk_backchar;
29 asc_forechar =
"W";
30 asc_backchar =
" ";
31 hzk_forechar =
"■";
32 hzk_backchar =
" ";
33
34 do
35 {
36 fflush(stdin);
37 printf(
"PLEASE SELECT THE MODE(1-ENGLISH, 2-CHINESE, 3-EXIT): ");
38 mode=
getchar();
39 fflush(stdin);
40 if(
'1'==
mode)
41 {
42 printf(
"PLASE INPUT THE STRING YOU WANT TO SHOW (MAX WITH 8 CHARACTERS):");
43 while((input=getchar())!=
'\n')
44 ascchar[number++] =
input;
45 PrintASCChar(ascchar,asc_forechar,asc_backchar);
46 }
47 if(
'2'==
mode)
48 {
49 printf(
"PLASE INPUT THE STRING YOU WANT TO SHOW (MAX WITH 2 CHINESE CHARACTERS):");
50 scanf(
"%s",hzkchar);
51 PrintHZKChar(hzkchar,hzk_forechar,hzk_backchar);
52 }
53 if(
'3'==
mode)
54 exit(
0);
55 }
56 while(mode==
'1'||mode==
'2'||mode==
'3');
57
58 getch();
59 }
60
61 void PrintASCChar(
char * modelchar ,
char * forechar ,
char *
backchar)
62 {
63 int i,j,num;
64 char code[MAXASC][ASC_16];
65 unsigned
long offset[MAXASC];
66 FILE *
fASC;
67
68 if((fASC=fopen(
"../ASC16",
"r"))==
NULL)
69 {
70 printf(
"FILE OPEN ERROR! PLEASE ADD FILE IN UPPER DESTINATION.");
71 getch();
72 exit(
0);
73 }
74 for(num=
0; num<MAXASC; num++
)
75 {
76 offset[num] = *(modelchar+num)*ASC_16 +
1;
77 fseek(fASC, offset[num], SEEK_SET);
78 fread(code[num], ASC_16,
1, fASC);
79 }
80
81 //printf("character = %s, offset = %ld\n",modelchar, offset);
82 for(i=
0; i<ASC_16; i++
)
83 {
84 printf(
" ");
85 for(num=
0; num<MAXASC; num++
)
86 {
87 for(j=
0; j<ASC_16/
2; j++
)
88 if(code[num][i]&(
0x80>>
j))
89 printf(forechar);
90 else printf(backchar);
91 printf(backchar);
92 }
93 printf(
"\n");
94 }
95 }
96
97
98 void PrintHZKChar(
char * modelchar ,
char * forechar ,
char *
backchar)
99 {
100 int i,j,k,num;
101 char code[MAXHZK][HZK_16*
2];
102 unsigned
char quma[MAXHZK],weima[MAXHZK];
103 unsigned
long offset[MAXHZK];
104 FILE *
fHZK;
105
106 if((fHZK=fopen(
"../HZK16",
"r"))==
NULL)
107 {
108 printf(
"FILE OPEN ERROR! PLEASE ADD FILE IN UPPER DESTINATION.");
109 getch();
110 exit(
0);
111 }
112 for(num=
0; num<MAXHZK; num++
)
113 {
114 quma[num] = *(modelchar+
2*num) -
0xa0;
115 weima[num] = *(modelchar+
2*num+
1) -
0xa0;
116 offset[num] = (
94*(quma[num]-
1)+(weima[num]-
1))*(HZK_16*
2);
117 fseek(fHZK, offset[num], SEEK_SET);
118 fread(code[num], HZK_16*
2,
1, fHZK);
119 }
120
121 //printf("character = %s, quma = %d, weima = %d, offset = %ld\n",modelchar, quma, weima, offset);
122 for(i=
0; i<HZK_16; i++
)
123 {
124 printf(
" ");
125 for(num=
0; num<MAXHZK; num++
)
126 for(k=
0; k<
2; k++
)
127 for(j=
0; j<HZK_16/
2; j++
)
128 if(code[num][i*
2+k]&(
0x80>>
j))
129 printf(forechar);
130 else printf(backchar);
131 printf(backchar);
132 printf(
"\n");
133 }
134 }
转载于:https://www.cnblogs.com/doodle777/p/3160012.html
相关资源:用C#实现一个字模点阵提取程序