GBK点阵显示字库的制作和使用
转自:http://blog.csdn.net/exbob/article/details/6539643
GBK编码共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。以两个字节表示一个汉字,编码范围是0x8140~0xfefe,兼容GB2318,并覆盖了unicode中的所有汉字。Win7记事本默认以GBK保存汉字。
关于GBK的详细信息:http://baike.baidu.com/view/25421.htm
开发环境
Win7、Eclipse、MinGW
1.生成GBK全字符文件
运行下面这段代码,生成GBK全字符文件gbk.txt,编码范围0x8140~0xfefe。
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- FILE *fp=0;
- char ch=0;
- unsigned short int start=0x8140;
- unsigned char part1=0;
- unsigned char part2=0;
- fp=fopen("gbk.txt","wb");
- if(fp==NULL)
- {
- perror("Cann't open gbk.txt");
- return -1;
- }
- else
- printf("Creat file gbk.txt/n");
- while(start < 0xfeff)
- {
- part1=start>>8;
- part2=start;
- fputc(part1,fp);
- fputc(part2,fp);
- start++;
- }
- fclose(fp);
- printf("success!");
- return 0;
- }
运行后,用记事本打开gbk.txt文件,可以看到其中的字符。
2.生成字模二进制文件
用“牧码字模”软件打开gbk.txt文件,选择字体为宋体,字重为1,点阵大小16*16,对齐方式为左下,取模方式为“纵向取模、高位在下”。输出格式选择bin。然后点击输出,会生成一个temp.bin文件,改名为gbk.bin。
gbk.bin文件就是GBK编码字符的点阵字库文件,每32个字节可以绘制一个字符,例如第一个字符‘丂’的显示如下:
取模的数据为:
0x02, 0x02, 0x02, 0xc2, 0xb2, 0x8e, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x40, 0x3f, 0x00, 0x00, 0x00, 0x00,
3.使用字库文件
gbk.bin文件中按GBK编码的大小排列,每32个字节可以显示一个字符,假设一个字符的GBK编码为NUM,那么它的点阵数据第一个字节的位置就是:
(NUM-0x8140)*32
从这个字节开始,读取32个字节,将其按按照取模方式显示即可。
例如:用Linux的终端模拟点阵屏幕,每个字符位置就是一个点,程序如下:
- #include <stdio.h>
- #include <unistd.h>
- #include <curses.h>
- #define START 0x8140
- #define DATANUM 0x20
- int displaychar(FILE *fp,unsigned short int dispch,char fillch,char start_x,char start_y);
- int main(void)
- {
- FILE * fp=0;
- unsigned short int testch = 0xb0ae; //汉字'爱‘的gbk码
- fp = fopen("gbk.bin","rb");
- initscr();
- displaychar(fp,testch,'*',0,0);
- refresh();
- while(1);
- endwin();
- fclose(fp);
- return 0;
- }
- /*
- * fp指向点阵字库二进制文件
- * 以点阵方式显示一个GBK字符
- * dispch是要显示的字符,fillch是填充点阵的字符
- * start_x,start_y是显示的起始坐标
- */
- int displaychar(FILE *fp,unsigned short int dispch,char fillch,char start_x,char start_y)
- {
- char x=start_x;
- char y=start_y;
- unsigned int location=(dispch-START)*DATANUM;
- int i=0;
- int j=0;
- char buf=0;
- fseek(fp,location,SEEK_SET);
- for(i=0;i<DATANUM;i++)
- {
- buf=fgetc(fp);
- //显示一个字节
- for(j=0;j<8;j++)
- {
- move(y+j,x);
- if( buf & (0x01<<j) )
- {
- addch(fillch);
- }
- }
- if(x == (start_x+15))
- {
- x=start_x;
- y=start_y+8;
- }
- else
- x++;
- }
- return 0;
- }
显示效果如下:
下载:
字库文件:http://download.csdn.net/source/3359198
字模提取软件:http://download.csdn.net/source/3358791
GBK点阵显示字库的制作和使用的更多相关文章
- 在SDL中显示GBK点阵汉字
大家注意到没有,RA2的中文版本使用的是GBK点阵字库,这样做有一个好处:不管玩家是用的简体还是繁体都能识别显示的文字. GBK的意思大概是“国家标准汉字扩展字符集”吧,记不清了.但它的确是个好东东, ...
- ASCII字符点阵字库的制作和使用
转自:http://blog.csdn.net/exbob/article/details/6532772 开发环境: Win7,Eclipse,MinGW 1.生成ASCII字符文件 ASCII编码 ...
- LED点阵显示名字
学习了一周的单片机,然后中途有事打断了两周,现在温习一下之前学的东西,用“普中科技单片机”上的LED点阵显示自己的名字. P1接J19(绿).P2接J20(红),P0接J12(数码管段选):5V电压: ...
- Android-如何显示版本号并制作3秒跳转页
前言 大家好,给大家带来Android-如何显示版本号并制作3秒跳转页的概述,希望你们喜欢 软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and ...
- LED点阵显示
/*********************************************************** 8*8LED点阵---显示数字实验 实现现象:下载程序后点阵上显示数字0 注意 ...
- Android的Recovery中font_10x10.h字库文件制作
任务是要汉化Android中的Recovery,就了解了bootable/recovery/minui/font_10x18.h这个英文字库的来历,最终汉化的时候并没有自己汉字字库,用的github上 ...
- c#调用c++dll(c++界面在c#显示)____制作dll
1.c++dll含界面,以摄像头dll为例: 1.直接在c++SDK上调试运行成功,生成dll. 2.留一个调用接口(格式如下,写在cpp文件中,即函数体): extern "C" ...
- [OpenGL]点阵显示生日快乐小程序
刚工作没多久的时候,业余学习了OGL的知识(这是写不好的借口吧), 在某个异性生日的时候写了这个程序. 编译平台: MinGW GCC gcc -o happOK happyOK.c -lglut32 ...
- 【STM32H7教程】第53章 STM32H7的LTDC应用之汉字小字库和全字库制作
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第53章 STM32H7的LTDC应用之汉字小字库 ...
随机推荐
- MyBatis做动态模糊查询时,like后面要不要加单引号??
做项目遇到了个奇怪的问题,项目里面要对商品.账户.进行分别的多条件查询,于是我就采用动态多条件分页查询,起初在做账户部分的时候Mybatis是这样写的 <!-- 动态多条件分页查询 --> ...
- PS CC 破解安装教程(亲测可用)
PS CC版本新增了一些更高效的切图工具,比如可以直接右击图层转化为PNG图像 下面介绍一种亲测可用的破解安装教程 软件下载地址:https://pan.baidu.com/s/1dFJFqhj 一. ...
- Ubuntu/CentOS下编译Nginx最基本参数
Ubuntu/CentOS下编译Nginx安装基本参数,做个记录: groupadd www useradd -g www www ./configure --user=www --group=www ...
- 数据挖掘、目标检测中的cnn和cn---卷积网络和卷积神经网络
content 概述 文字识别系统LeNet-5 简化的LeNet-5系统 卷积神经网络的实现问题 深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功.本人在多年之前也曾接触过神经网络.本系 ...
- ant 可自动替换友盟渠道、版本号、包名
可自动替换友盟渠道.版本号.包名 如何集成到我的项目里 前提:了解android官方文档,在项目目录中执行ant debug能打包,比如常见的打包步骤: android update project ...
- python 基础 9.1 连接数据库
二.数据库连接 MySQLdb 提供了connect 方法用来和数据库建立连接,接收数个参数,返回连接对象: #/usr/bin/python #coding=utf-8 #@Time :2017 ...
- EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之:bootstrap弹窗功能的实现
在web前端的网页设计中,为了展示出简洁的网页风格和美观的效果,往往就会使用弹窗效果 在EasyNVR前端页面录像检索功能时,必然会播放录像,如果单独为播放录像文件排一个界面,用户在使用上会更加繁琐, ...
- 九度OJ 1162:I Wanna Go Home(我想回家) (最短路径)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:870 解决:415 题目描述: The country is facing a terrible civil war----cities i ...
- Java集合(一):Java集合概述
注:本文基于JDK 1.7 1 概述 Java提供了一个丰富的集合框架,这个集合框架包括了很多接口.虚拟类和实现类. 这些接口和类提供了丰富的功能.可以满足主要的聚合需求. 下图就是这个框架的总体结构 ...
- lambda map filter 用法
lambda 可以这样认为,lambda作为一个表达式 非常容易理解,在这里lambda简化了函数定义的书写形式.是代码更为简洁,但是使用函数的定义方式更为直观,易理解. #定义函数:普通方式 def ...