HZK16漢字16 * 16ドットマトリックスフォントライブラリとサンプルプログラムの使用-放浪に同行(twofei.com)
上記のコードを参照してください。次のHZK16ドットマトリックスライブラリが必要です。ダウンロードリンク:
pengfexue2 / printPlay:Python印刷点阵字/ Python印刷による漢字の形成(github.com)
開発環境のCodeBlocksで、優れたHZK16ドットマトリックスライブラリを同じレベルのmain.cディレクトリに配置します。
│ first_c.cbp
│ first_c.depend
│ first_c.layout
│ HZK16
│ main.c
│
├─bin
│ └─Debug
│ first_c.exe
│
└─obj
└─Debug
main.o
具体的なコードは次のとおりです。直接コピーのコードはわずかに変更されています。
#include <stdio.h>
int main(void)
{
FILE* fphzk = NULL;
FILE* fphzk2 = NULL;
FILE* fphzk3 = NULL;
int i, j, k, offset, offset2, offset3;
int flag, flag2, flag3;
unsigned char buffer[32];
unsigned char buffer2[32];
unsigned char buffer3[32];
unsigned char word[3] = "长";
unsigned char word2[3] = "津";
unsigned char word3[3] = "湖";
unsigned char key[8] = {
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01
};
fphzk = fopen("hzk16", "rb");
if(fphzk == NULL){
fprintf(stderr, "error hzk16\n");
return 1;
}
fphzk2 = fopen("hzk16", "rb");
if(fphzk2 == NULL){
fprintf(stderr, "error hzk16\n");
return 1;
}
fphzk3 = fopen("hzk16", "rb");
if(fphzk2 == NULL){
fprintf(stderr, "error hzk16\n");
return 1;
}
offset = (94*(unsigned int)(word[0]-0xa0-1)+(word[1]-0xa0-1))*32;
fseek(fphzk, offset, SEEK_SET);
fread(buffer, 1, 32, fphzk);
offset2 = (94*(unsigned int)(word2[0]-0xa0-1)+(word2[1]-0xa0-1))*32;
fseek(fphzk2, offset2, SEEK_SET);
fread(buffer2, 1, 32, fphzk2);
offset3 = (94*(unsigned int)(word3[0]-0xa0-1)+(word3[1]-0xa0-1))*32;
fseek(fphzk3, offset3, SEEK_SET);
fread(buffer3, 1, 32, fphzk3);
for(k=0; k<16; k++){
for(j=0; j<2; j++){
for(i=0; i<8; i++){
flag = buffer[k*2+j]&key[i];
printf("%s", flag ? "*" : " ");
}
}
printf("\t");
for(j=0; j<2; j++){
for(i=0; i<8; i++){
flag2 = buffer2[k*2+j]&key[i];
printf("%s", flag2 ? "*" : " ");
}
}
printf("\t");
for(j=0; j<2; j++){
for(i=0; i<8; i++){
flag3 = buffer3[k*2+j]&key[i];
printf("%s", flag3 ? "*" : " ");
}
}
printf("\n");
}
fclose(fphzk);
fclose(fphzk2);
fclose(fphzk3);
fphzk = NULL;
fphzk2 = NULL;
fphzk3 = NULL;
return 0;
}
別の
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE* fphzk = NULL;
int i, j, k, offset;
int flag;
unsigned char buffer[32];
unsigned char word[5];
unsigned char key[8] = {
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01
};
fphzk = fopen("hzk16", "rb");
if(fphzk == NULL){
fprintf(stderr, "error hzk16\n");
return 1;
}
while(1){
printf("输入要生成字模的汉字(多个):");
for(;;){
fgets((char*)word, 3, stdin);
if(*word == '\n')
break;
offset = (94*(unsigned int)(word[0]-0xa0-1)+(word[1]-0xa0-1))*32;
fseek(fphzk, offset, SEEK_SET);
fread(buffer, 1, 32, fphzk);
for(k=0; k<16; k++){
for(j=0; j<2; j++){
for(i=0; i<8; i++){
flag = buffer[k*2+j]&key[i];
printf("%s", flag ? "*" : " ");
}
}
printf("\n");
}
printf("\n");
}
}
fclose(fphzk);
fphzk = NULL;
return 0;
}
他にもある
C言語の高度なプログラミング例:[1]ドットマトリックス漢字-Baiduエクスペリエンス(baidu.com)
単語の拡大は簡単にわかりますが、縮小には少し問題があります。C言語のグラフィックプログラミングを使用しているのでしょうか。