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

#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. HDU 2136 Largest prime factor

    题目大意:求出比给出数小的互质的质数个数. 题解:直接用筛法求素数,稍微改编一下,将原先的布尔数组变为数组用来记录信息就可以了. 注意点:大的数组定义要放在程序的开头,不要放在main里面,不然会栈溢 ...

  2. cocos2d-x新手学习之Helloworld(第三篇)[版本号:cocos2d-x-3.1.1]

    上篇中,能够正常执行NDK中的样例.可是由cocos2d-x生成的项目,不能编译成功.上一篇戳这里: http://blog.csdn.net/xjjjjjjjjjjj/article/details ...

  3. SqlBulkCopy的使用

    1.问题:导入大数据量到数据库,用我们普通的SqlHelper来做是每插入一条都是打开连接关闭连接,这样太慢,因此我们会想到让SqlConnection一直打开直到所有数据都插入完成再关闭连接.但是根 ...

  4. java volatile关键字的理解

    转载:http://shmilyaw-hotmail-com.iteye.com/blog/1672779 一个多线程的示例引发的问题 在讨论这个关键字之前先看一个多线程的示例代码: public c ...

  5. BZOJ 3175: [Tjoi2013]攻击装置( 匈牙利 )

    黑白染成二分图, 然后不能同时选的就连边, 最大匹配数为m, t为不能放的数目, 则题目所求最大点独立集为 n*n-m-t -------------------------------------- ...

  6. 字符串解析成easyui-tree的格式

    传入的list: [30 : null : null, 301503 : null : null, 301501 : null : null, 301502 : null : null, 3015 : ...

  7. Laravel 5.1 ACL权限控制 二 之策略类

    随着应用逻辑越来越复杂,要处理的权限越来越多,将所有权限定义在AuthServiceProvider显然不是一个明智的做法,因此Laravel引入了策略类,策略类是一些原生的PHP类,和控制器基于资源 ...

  8. QStringLiteral(源代码里有一个通过构造函数产生的从const char*到QString的隐式转换,QStringLiteral字符串可以放在代码的任何地方,编译期直接生成utf16字符串,速度很快,体积变大)

    原作者: Olivier Goffart 点击打开链接http://woboq.com/blog/qstringliteral.html 译者: zzjin 点击打开链接http://www.tuic ...

  9. python概要

    python与r语言接口Rpy,统计 科学计算,数值拟合:numpy,scipy 可视化2d:matplotlib,Pylab 可视化3d:mayaviz 复杂网络:networkx 交互终端: bs ...

  10. IT第六天 - eclipse快捷操作、万年历项目的编写、菱形的打印输出、代码简化

    IT第六天 上午 小项目 1.程序提前结束的退出标志 2.登录用户的模拟,给出适当的提示信息 3.根据要求,寻找规律,然后编写程序 Eclipse的使用 1.快捷键的使用 下午 中小项目 1.九九乘法 ...