非常简陋的一段小程序,演示怎样显示点阵字库。有时间的时候再详解。

#include <stdio.h>
#include <stdlib.h> struct HzkInfoStruct
{
int HzkSelect;
int HzkSquare;
char * fileName;
FILE * file;
int martixBytesCount;
unsigned char *pMatrix;
}; typedef struct HzkInfoStruct HzkInfo; void SelectHZK(HzkInfo * pHzkInfo);
void LoadHzkInfo(HzkInfo * pHzkInfo);
void CleanupHzkInfo(HzkInfo hzkInfo);
void GetQuWh(unsigned char *chineaseWord, int * qu, int * wh);
void FillMartix(HzkInfo * pHzkInfo, const int qu, const int wh);
void PrintMartix(HzkInfo hzkInfo); int _tmain(int argc, _TCHAR* argv[])
{
unsigned char chinease[3] = "京";
HzkInfo hzkInfo;
int qu;
int wh; SelectHZK(&hzkInfo); if(hzkInfo.file == NULL || hzkInfo.pMatrix == NULL)
{
printf("HZK loading failed. Will exit now.\n");
goto EXIT;
} GetQuWh(chinease, &qu, &wh);
FillMartix(&hzkInfo, qu, wh);
PrintMartix(hzkInfo); EXIT:
CleanupHzkInfo(hzkInfo);
return 0;
} void GetQuWh(unsigned char *chineaseWord, int * qu, int * wh)
{
*qu = chineaseWord[0] - 0xa0;
*wh = chineaseWord[1] - 0xa0;
} void FillMartix(HzkInfo * pHzkInfo, const int qu, const int wh)
{
fseek(pHzkInfo->file, (94 * (qu - 1) + (wh - 1)) * pHzkInfo->martixBytesCount, SEEK_SET);
fread(pHzkInfo->pMatrix, pHzkInfo->martixBytesCount, 1, pHzkInfo->file);
} void PrintMartix(HzkInfo hzkInfo)
{
int i, j, k;
int i_steps = hzkInfo.HzkSquare / 8;
unsigned char * pMatrix = hzkInfo.pMatrix; printf("\n"); for (j = 0; j < hzkInfo.HzkSquare; j++)
{
for (i = 0; i < i_steps; i++)
{
for (k = 0; k < 8; k++)
{
if (pMatrix[i] & (0x80 >> k))
{
printf("%c ", '*');
}
else
{
printf(" ");
}
}
} pMatrix += i_steps;
printf("\n");
} printf("\n");
} void SelectHZK(HzkInfo * pHzkInfo)
{ SELECT: printf("Please select [0: Exit; 1: HZK16; 2: HZK32;] : ");
scanf_s("%d", &(pHzkInfo->HzkSelect)); if(pHzkInfo->HzkSelect == 0)
{
exit(0);
} if(pHzkInfo->HzkSelect < 1 || pHzkInfo->HzkSelect > 2)
{
goto SELECT;
} switch(pHzkInfo->HzkSelect)
{
case 1:
pHzkInfo->fileName = "Hzk16";
pHzkInfo->HzkSquare = 16;
break;
case 2:
pHzkInfo->fileName = "HZK32";
pHzkInfo->HzkSquare = 32;
break;
} LoadHzkInfo(pHzkInfo);
} void CleanupHzkInfo(HzkInfo hzkInfo)
{
if(hzkInfo.pMatrix != NULL)
{
fclose(hzkInfo.file); free(hzkInfo.pMatrix);
hzkInfo.pMatrix = NULL;
}
} void LoadHzkInfo(HzkInfo * pHzkInfo)
{
printf("Loading %s ... ", pHzkInfo->fileName);
if ((fopen_s(&(pHzkInfo->file), pHzkInfo->fileName, "rb")) != 0)
{
printf("Failed.\n");
pHzkInfo->file = NULL;
pHzkInfo->martixBytesCount = 0;
pHzkInfo->pMatrix = NULL;
}
else
{
pHzkInfo->martixBytesCount = pHzkInfo->HzkSquare * pHzkInfo->HzkSquare / 8;
pHzkInfo->pMatrix = (unsigned char *)malloc(pHzkInfo->martixBytesCount); if(pHzkInfo->pMatrix == NULL)
{
printf("Malloc failed.\n");
fclose(pHzkInfo->file);
pHzkInfo->file = NULL;
pHzkInfo->martixBytesCount = 0;
pHzkInfo->pMatrix = NULL; return;
} printf("Done.\n");
}
}

演示效果:

使用16*16 的字库:

使用32*32 的字库:

C Tips:显示点阵汉字的小样例的更多相关文章

  1. 单片机中不带字库LCD液晶屏显示少量汉字

    单片机中不带字库LCD液晶屏如何显示少量汉字,一般显示汉字的方法有1.使用带字库的LCD屏,2.通过SD 卡或者外挂spi flash存中文字库,3.直接将需要的汉字取模存入mcu的flash中. 第 ...

  2. LCD1602显示中文汉字

    小子在西藏 2011-11-25编写 特别说明笔者是上面的作者,感谢那些原意分享知识的人.时隔5年我又看到了笔者当年写的东西,我想这期间还有许许多多的人 今天写在博客上,愿更多后来者可以学习. LCD ...

  3. Spring DI模式 小样例

           今儿跟同事讨论起来spring早期的,通过大篇幅xml的配置演变到今天annotation的过程,然后随手写了个小样例,感觉还不错,贴到这里留个纪念. 样例就是用JAVA API的方式, ...

  4. SpringMVC+Spring+Hibernate的小样例

    Strusts2+Spring+Hibernate尽管是主流的WEB开发框架,可是SpringMVC有越来越多的人使用了.确实也很好用.用得爽! 这里实现了一个SpringMVC+Spring+Hib ...

  5. 使用Dagger2创建的第一个小样例

    将Dagger系列的咖啡壶样例再做一下简化,作为Dagger2的入门的第一个小样例. 场景描写叙述:有一个电水壶,它使用一个加热器来烧水.电水壶具备的功能有:開始加热(on方法),结束加热(off方法 ...

  6. 在SDL中显示GBK点阵汉字

    大家注意到没有,RA2的中文版本使用的是GBK点阵字库,这样做有一个好处:不管玩家是用的简体还是繁体都能识别显示的文字. GBK的意思大概是“国家标准汉字扩展字符集”吧,记不清了.但它的确是个好东东, ...

  7. LCD显示——点阵字体

    Bitmap font 点阵字体是把每一个字符都分成16×16或24×24个点,然后用每个点的虚实来表示字符的轮廓. 点阵字体优点是显示速度快,不像矢量字体需要计算:其最大的缺点是不能放大,一旦放大后 ...

  8. Java 小样例:图书馆课程设计(Java 8 版)

    用 Java 模拟一个图书馆.包含创建图书.创建读者.借书.还书.列出全部图书.列出全部读者.列出已借出的图书.列出过期未还的图书等功能. 每一个读者最多仅仅能借 3 本书,每一个书最多仅仅能借 3 ...

  9. Keil BUG 导致读字库时,无法显示某些汉字解决办法

    原因在于:KEIL C51 的一个汉字BUG,keil c51在编译的时候会将0xfd的字符(有些汉字含该字符的内码)过滤, 最佳解决方案:打补丁,用  晓奇工作室出的补丁 cckeilvxx.exe ...

随机推荐

  1. activemq在windows下启动报错,闪退问题

    查验了网上各种方法,都没搞定,最后楼主决定按照linux的解决套路来,把windows计算机名称改为纯英文字母,原计算机名:lee_pc,修改后为leepc,然后重启电脑,再重新运行activemq. ...

  2. Dijkstra算法详解

    1.dijkstra算法简介 Dijkstra算法是由E.W.Dijkstra于1959年提出,又叫迪杰斯特拉算法,它应用了贪心算法模式,是目前公认的最好的求解最短路径的方法.算法解决的是有向图中单个 ...

  3. Win32 GDI基础(笔记)

    1.GDI名字的意义 GDI Graphic Device Interface,我说不清和GUI有什么区别.可能一种针对设备,一种针对用户而言吧,反正以后都说GDI,也就是Windows的图形编程. ...

  4. leetcode第一刷_Path Sum II

    在更新上面一道题的时候我就想,是不是另一道打印路径的,果不其然啊. 这样的题非经常见的,做法也非常easy,我是用一个引用的vector来存,满足条件之后直接压入结果集中,当然也能够用数组之类的,都一 ...

  5. SQL Server 性能优化

    今天有位网友找我给他原有的系统数据库优化下查询速度,个人总结了几点对sqlserver的优化 1.Sql查询语句的优化,如:能使用外连接查询出来的尽量别用内连接...,这些个就不废话,如果我使用这个给 ...

  6. Extjs 3.0 htmleditor实现插入图片功能

    首先感谢前辈们的无私奉献.贴出参考地址 http://zhidao.baidu.com/link?url=Q0ZM405OFNy_xAHSut9TepRJxgXCxFayQttrQz1N82dlA1_ ...

  7. 设计模式值六大原则——接口隔离原则 (ISP)

    接口隔离原则 Interface Segregation Principle    定义: 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上 我们可以把这两个定义概括为一句话:建立 ...

  8. python中的字符串和数字连接

    1. 将数字强制转换成字符串 i = 1000 str1 = "hello" print str1 + str(i) 2. 格式化成字符串 i = 1000 str1 = &quo ...

  9. Android 6.0 新特性 整理 资料来自网络

    Android 6.0新特性 Runtime Permissions Doze and App Standby Apache HTTP Client Removal BoringSSL Access ...

  10. slf4j 和 log4j合用的(Maven)配置(转)

    简述:添加logger的日志输出,下面是配置信息供备忘 步骤:1. 在Maven的porn.xml 文件中添加dependency如下 <dependency> <groupId&g ...