C语言星号汉字名字

HZK16汉字16*16点阵字库的使用及示例程序 - 陪她去流浪 (twofei.com)

参考以上代码,需要下一个HZK16点阵库,下载链接:

pengfexue2/printPlay: Python print 点阵字/ Python print to form Chinese characters (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

具体代码如下,直接 copy  的代码,稍微修改了一下:

#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.com)

字的放大貌似容易实现,缩小就有点问题了,是否是使用C语言图形编程?

猜你喜欢

转载自blog.csdn.net/sdaujz/article/details/110085592