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

#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. zookeeper集群搭建设置

    zookeeper 官网:http://zookeeper.apache.org/ 现在最新版本是 3.4.6 ,但是这个版本我没有运行起来,可能是那配置出现问题了,现在我用的是3.4.5 http: ...

  2. ActionBarSherlock学习笔记 第一篇——部署

    ActionBarSherlock学习笔记 第一篇--部署          ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...

  3. javascript - Get page source code - Stack Overflow

    javascript - Get page source code - Stack Overflow Get page source code

  4. TMT行业分析师

    诚聘英才 - 传媒梦工场 TMT行业分析师 工作经验:  2年以上 发布日期:  2013-01-04 最低学历:  本科 管理经验:  否 工作性质:  全职 招聘人数:  1人 职位类别:  金融 ...

  5. 彻底解决:Keil编译提示“File has been changed outside the editor, reload?”提示!

    如图所示,很多同学在使用keil时都可能会碰到上图中的“File has been changed outside the editor, reload?”提示,很令人烦心.当遇到此提示,首先不要郁闷 ...

  6. 使用LiveWriter发布Orchard博客

    我们可以Windows Live Writer来发布Orchard博客 在Dashboard–> Modules菜单找到 Remote Blog Publishing 模块.点击 Enable ...

  7. BZOJ 3907: 网格( 组合数 + 高精度 )

    (0,0)->(n,m)方案数为C(n,n+m), 然后减去不合法的方案. 作(n,m)关于y=x+1的对称点(m-1,n+1), 则(0,0)->(m-1,n+1)的任意一条路径都对应( ...

  8. sqm(sqlmapGUI) pcat修改版

    sqlmap是一款开源的注入工具,支持几乎所有的数据库,支持get/post/cookie注入,支持错误回显注入/盲注,还有其他多种注入方法. 支持代理,指纹识别技术判断数据库 .而sqm(sqlma ...

  9. zookeeper 安装

    Zookeeper安装 一.   下载zookeeper http://www.apache.org/dist/zookeeper/stable/ 二.   解压zookeeper.tar >& ...

  10. zkw好写吗

    codeforces果然名不虚传,仔细研读了该篇文章后感觉受益良多! 其实这篇文章探讨的就是zkw,其中的一些写法让我大开眼界,感觉是zkw那篇论文的又一个提升: 内存不再是2的幂了,直接就是\(2n ...