ASCII字符点阵字库的制作和使用
转自:http://blog.csdn.net/exbob/article/details/6532772
开发环境:
Win7,Eclipse,MinGW
1、生成ASCII字符文件
ASCII编码的可打印字符是0x20~0x7E,先用运行下面这段代码,生成一个包含全部可打印字符的txt文件:
- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc,char *argv[])
- {
- FILE * fp;
- unsigned char i = 0;
- fp = fopen("ascii.txt","w");
- if(fp == 0)
- {
- perror("open");
- return -1;
- }
- for(i=0x20;i<0x7F;i++)
- {
- fputc(i,fp);
- }
- return 0;
- }
运行后,用记事本打开ascii.txt文件,会看到如下文本:

2、生成字模数据
使用字模提取V2.1软件,设置字体为宋体、12,纵向取模,字节倒序(即高位在下)。这些设置可以根据实际情况设置。用C51格式生成字模,大小是8*16,每个字符用16个字节表示。如字符A的显示如下:

取模数据为:
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,
然后将所有的字模数据复制到一个文本文件,删除其中的空行,换行,注释等与字模数据无关的内容,并将文件最后的一个逗号改为ASCII字符的句号,得到一个纯字模数据文件ascii_zk.txt
3、将字模数据文件转换为二进制文件
将ascii_zk.txt文件中的每个字模数据转换为占一个字节的数,将所有的数据填充为一个二进制文件ascii_zk.bin。这样,按照ASCII码的顺序,ascii_zk.bin中每16个字节就可以绘制一个字符。文件转换的程序如下:
- #include <stdio.h>
- #include <stdlib.h>
- /*
- *将一个ascii字符转换为数
- */
- unsigned char c2x(char ch)
- {
- unsigned char temp=0;
- if(ch>=0x30 && ch<=0x39)
- temp = ch-0x30;
- else if(ch>=0x41 && ch<=0x46)
- temp = 0x0a+(ch-0x41);
- else if(ch>=0x61 && ch<=0x66)
- temp = 0x0a+(ch-0x61);
- else
- temp =0xff;
- return temp;
- }
- //将ascii_zk.txt转换为二进制文件
- int main(void)
- {
- char buffer[5];
- unsigned char ch=0;
- int i=0;
- FILE *frp=0;
- FILE *fwp=0;
- for(i=0; i<5; i++)
- buffer[i] = 0;
- frp=fopen("ascii_zk.txt","r");
- fwp=fopen("ascii_zk.bin","w");
- while(buffer[4] != 0x2e) //全部数据以句号结尾
- {
- for(i=0; i<5; i++)
- buffer[i]=fgetc(frp);
- ch = c2x(buffer[2]);
- ch = ch*16;
- ch = ch+c2x(buffer[3]);
- fputc(ch,fwp);
- }
- fclose(frp);
- fclose(fwp);
- return 0;
- }
字库文件制作完毕。
4、字库文件ascii_zk.bin的使用
ascii_zk.bin文件从ASCII码的空格(0x20)开始,每16个字节表示一个字符的点阵字模。以字母A为例,它的ASCII码是0x41,那么,它的字模数据的开始位置就是:
(0x41-0x20)*16
从这个位置开始依次读取16个字节,就是字母A的字模数据,将其显示即可。
例:用Linux的终端模拟显示点阵字符,终端屏幕中的每个字符位置就是一个点,程序如下。
- #include <stdio.h>
- #include <unistd.h>
- #include <curses.h>
- #define START 0x20
- #define DATANUM 0x10
- int displaychar(FILE *fp,char dispch,char fillch,char start_x,char start_y);
- int main(void)
- {
- FILE* fp=0;
- int i = 0;
- const char * teststring="I love Julia";
- fp=fopen("ascii_zk.bin","r");
- initscr();
- for(i=0;(teststring[i]!=0);i++)
- {
- displaychar(fp,teststring[i],'*',0+(i*8),0);
- }
- refresh();
- while(1);
- endwin();
- fclose(fp);
- return 0;
- }
- /*
- * 以点阵方式显示一个ASCII字符
- * dispch是要显示的字符,fillch是填充点阵的字符
- * start_x,start_y是显示的起始坐标
- */
- int displaychar(FILE *fp,char dispch,char fillch,char start_x,char start_y)
- {
- int location = ((dispch-START) * DATANUM);
- char x=start_x;
- char y=start_y;
- int i=0;
- int j=0;
- char buf=0;
- //将文件流指针移到到dispch字符点阵数据的起始位置
- 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+7))
- {
- x = start_x;
- y = (start_y+8);
- }
- else
- {
- x++;
- }
- }
- return 0;
- }
该程序在Fedora12的终端中运行,效果如下:

下载:
ASCII字符点阵字库的制作和使用的更多相关文章
- GBK点阵显示字库的制作和使用
转自:http://blog.csdn.net/exbob/article/details/6539643 GBK编码共收录汉字21003个.符号883个,并提供1894个造字码位,简.繁体字融于一库 ...
- 制作ASCII字符动画
看过Matrix的同学应该还记得,在母舰上一直在计算的电脑屏幕在Neo觉醒的时候,不停的下落的杂乱无章的字符组成了Neo当时所处的场景.其实利用开源和免费的工具,我们可以将现有的视频转换为ASCII字 ...
- 使用opencv调用24*24点阵字库和8*16ASCII字库在图片显示文字数字
课程实验:编程读汉字点阵字库,把自己的名字和学号叠加到图片的右下位置. 主要步骤分为三部分 第一部分:读取图片(文件读取) 第二部分:读取文字并从字库中提取相应的编码(字库的存储原理) 第三部分:将相 ...
- 当点阵字库遇到3D
早在遥远的DOS时代,点阵汉字库为计算机处理汉字起到了关键作用.当时的显示器在图形模式下的分辨率只有640x480甚至320x200,显示汉字直接使用点阵字库在屏幕上打点就可以了.如今的电脑屏幕甚至手 ...
- ASCII字符集中的功能/控制字符
ASCII字符集中的功能/控制字符 Function/Control Code/Character in ASCII Version: 2011-02-15 Author: gree ...
- 由 char()函数返回的 ASCII字符集中的功能/控制字符
如果在excel下的单元格写入公式:=“国际经济与贸易”&CHAR(10)&"401班"&CHAR(10)&"A组".则出现: ...
- 将图片转为ASCII字符画
原文:将图片转为ASCII字符画 Copyright 2012 Conmajia 源代码下载:点击这里 什么是字符画?就是用ASCII字符来近似组成图像,就像这样: ╭╮ ╭╮ ││ ││ ╭┴┴—— ...
- 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace(/[^\x00-\xff] ...
- AsciiMorph - 新奇的 ASCII 字符画生成工具&插件
AsciiMorph 是一个新奇的 ASCII 字符画生成工具和开源插件.字符画(ASCII Art)的历史可以追溯到几十年前,起初是用在图形显示功能受限的设备上,用ASCII字符集里的可打印字符来拼 ...
随机推荐
- ASP.NET动态网站制作(4)--css(3)
前言:这节课主要运用前面所学的知识写三个例子,并且学习浏览器兼容性的解决方法. 内容: 例子1:一个关于列表的例子 html代码: <!DOCTYPE html PUBLIC "-// ...
- 一个小公司的前端笔试HTML CSS JS
网上有这套题的答案,版本也很多,我做了很多参考.本文就当个小笔记,可能有错误,还望指正~ 第1章 Html篇 1. 你做的网页在哪些浏览器测试过?这些浏览器的内核分别是什么? 浏览器类型 内核 Fi ...
- python基础教程_学习笔记11:魔法方法、属性和迭代器
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/31417309 魔法方法.属性和迭代器 在pyth ...
- JS dom最常用API
//document方法: var cont = document.getElementByIdx_x('cont'); //className给标签添加class cont.classN ...
- 通过JMX获取weblogic的监控指标
通过JMX获取weblogic的监控数据,包括JDBC,SESSION,SERVERLET,JVM等信息.主要用到weblogic自己的t3协议,所以要用到weblogic的jar包:wlfullcl ...
- 剑指Offer:矩形覆盖【N1】
剑指Offer:矩形覆盖[N1] 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 题目思考 我们先把2*8的 ...
- redis下载及安装服务
1 . 要安装Redis,首先要获取安装包. Windows的Redis安装包需要到以下GitHub链接找到. 链接:https://github.com/MSOpenTech/redis 打开网站后 ...
- debian下编译openwrt固件
参考文章:Ubuntu下编译OpenWRT固件 我买的路由器是RG100A-AA,采用了bcm63xx系列的芯片. 下载openwrt源码: svn co svn://svn.openwrt.org/ ...
- php 获取上上个月数据 使用 strtotime('-1 months')的一个bug
今天,使用php 日期函数处理数据,发现一个问题. 具体场景是这样的,我一直以为strtotime 格式化当前日期 或 指定日期可以找到对应的数据,比如我要查找上上个与的数据,因为我要获取当前时间的 ...
- python二叉树的遍历,递归和非递归及相关其它
# encoding=utf-8class node(object): def __init__(self,data,left=None,right=None): self.data = data s ...