免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2427 | 回复: 0
打印 上一主题 下一主题

Linux gcc 24*24点阵 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-09 16:38 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

void getHzKCode(unsigned char *c, char buff[])
{
        unsigned char qh, wh;
        unsigned long offset;
        FILE *HZK;
/*打开字库文件hzk24*/
        if ((HZK = fopen("HZKS_24*24.DZK", "rb")) == NULL) {
                printf("Can't open haz24,Please add it?");
                getchar();
                exit(0);
        }
        qh = *(c) - 0xa0;        /*10进制的160等于16进制的A0 */
        wh = *(c+1) - 0xa0;        /*获得区码与位码 */

        offset = (94 * (qh - 1) + (wh - 1)) * 72L;        /*计算该汉字在字库中偏移量 */
        fseek(HZK, offset, SEEK_SET);        /*将文件指针移动到偏移量的位置 */
        fread(buff, 72, 1, HZK);        /*从偏移量的位置读取72个字节 */
        printf("qh:%d,wh:%d,offset:%ld\n\r", qh, wh, offset);
}

void printHzKChar(char *mat, char *c1, char *c2)
{
        int i, j, k;
        for (i = 0; i < 24; i++) {        /*24*24点阵汉字,一共有24行 */
                for (j = 0; j < 3; j++)        /*横向有3个字节,循环判断每个字节的 */
                        for (k = 0; k < 8; k++)        /*每个字节有8位,循环判断每位是否为1 */
                                if (mat[i * 3 + j] & (0x80 >> k))        /*测试当前位是否为1 */
                                        printf("%s", c1);        /*为1的显示为字符c1 */
                                else
                                        printf("%s", c2);        /*为0的显示为字符c2 */
                printf("\n");        /*输完一行以后,进行换行 */
        }
}

int main(int argc,char *argv)
{
        char *code;
/*汉字占两个字节,前景字符和背景字符都要有两个英文字符或一个中文字符,否则字体将变形*/
        unsigned char *HzkC1 = "**";
       
        unsigned char *HzkC="王";
        unsigned char *HzkC2 = "  ";
        char buffer2[72];        /*存储中文字模信息 */
        unsigned char *hzk;

        getHzKCode(HzkC, buffer2);
        hzk = buffer2;
        printHzKChar(hzk, HzkC1, HzkC2);
        return;
}

我的点阵是24*24,GBK2312的,获取的区位码不对。这个程序我想扩展成将指定的汉字的点阵替换成我自定义的字符点阵,用于实验需要。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP