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

#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. grunt用来压缩前端脚本

    grunt作为一个任务管理工具,提供丰富的插件和强大的自动化管理功能.需要安装node及npm. 主要使用到两个文件,一个是npm的依赖配置文件package.json { "name&qu ...

  2. jdbc操作步骤和preparedStatment相比Statment的好处

    java操纵数据库封装了一组API,通过这组API可以透明的操作各种数据库,一般来讲,操纵数据库的步骤是: 一. try{ 1.加载数据库驱动 Class.forName("数据库驱动类&q ...

  3. 《TCP/IP详细说明》读书笔记(17章)-TCP传输控制协定

    1.TCP的服务 在一个TCP连接中.仅有双方进行彼此通信. TCP通过下列方式来提供可靠性: 1)应用数据被切割成TCP觉得最适合发送的数据块. 这和UDP全然不同,应用程序产生的数据报长度保持不变 ...

  4. ServiceBase 类

    https://msdn.microsoft.com/zh-cn/library/System.ServiceProcess.ServiceBase%28v=vs.80%29.aspx 为将作为服务应 ...

  5. 【转】How to Start Intel Hardware-assisted Virtualization (hypervisor) on Linux to Speed-up Intel Android x86 Emulator

    [转]How to Start Intel Hardware-assisted Virtualization (hypervisor) on Linux to Speed-up Intel Andro ...

  6. SSIS 阻塞,半阻塞和全阻塞 (Non-blocking, semi-blocking and Fully-blocking) transformations清单

    三种Blocking类型,这里跟数据流的Buff关系很大:■■ non-blocking transformations,每一行直接转换输出,没有等待.■■ partial-blocking tran ...

  7. myEclipse快捷键及其常用设置

    快捷键:    查找替换:ctrl + f    复制行: ctrl + alt + down    删除行: ctrl + d    插入行: shift + enter, ctrl + shift ...

  8. Resource is out of sync with the file system: 解决办法

    在eclipse中,启动server时报此错,是因为文件系统不同步造成的,解决方法有两个: (1)选中工程,右键,选择F5(手动刷新): (2)Window->Preferences->G ...

  9. 深入浅出—JAVA(4)

    4.方法操作实例变量

  10. Spring Boot 属性配置和使用(转)

    Spring Boot 属性配置和使用 Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot ...