这两天做屏幕的时候,看到之前从网上downlod的字库满足不了需要。翻阅了很多的blog,总结了并实现了自己定制制作字库的接口。
里面主要有两个接口,一个是将按要求从取某软件取得十六进制的数组放置在txt文件,然后调用以下的函数接口,完成txt文件到bin文件的转换。生成的bin文件既是需要的字库文件。
以下是我自己取模软件的相关设置和取得十六进制的txt文件
取模软件的设置和后面读取字库的顺序保持一致,这样读出来就会一致。这里暂时就不提供读取的接口了。同时我这里是对12*12的ASCII的取字,故设置为12*6,取出来是每个ASCII是12个十六进制。然后将12个的十六进制数,转换成一个数字,保存在bin文件中。
下面是文件的转换的接口:
#include <stdio.h>
#include <stdlib.h>
/* The two file need the user define */
#define TXTFILE "file.txt" /* the file save the typehead hexadecimal */
#define BINFILE "file.bin" /* change the txt file to bin file */
/********************************************************************************
*Func Name: ChangeChar2Number
*Func Function: Change the char to the number
16 to 10
*Func Params : char ch
*Result from Func: unsigned char
*Author : None
*Data of Creation: 2018-02-27
*Data of Modification: none
*Author of Modification:none
*Reason for Modification:none
*Version : 1.0
*History of Version : none
**********************************************************************************/
unsigned char ChangeChar2Number(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转换为二进制文件
/********************************************************************************
*Func Name: ChangeTxtToBin
*Func Function: Change the txt file to bin
*Func Params : None
*Result from Func: int
*Author : None
*Data of Creation: 2018-02-27
*Data of Modification: none
*Author of Modification:none
*Reason for Modification:none
*Version : 1.0
*History of Version : none
**********************************************************************************/
int ChangeTxtToBin(void)
{
char buffer[5];
unsigned char ch=0;
int loop = 0;
FILE *frp = NULL;
FILE *fwp = NULL;
/* 0x00, read the txt file each elements */
for(loop = 0; loop < 5; loop++)
{
buffer[loop] = 0;
}
frp = fopen(TXTFILE,"r");
if(0 > frp)
{
return -1;
}
fwp = fopen(BINFILE,"w");
if(0 > fwp)
{
return -1;
}
/* Txt file the ending elements ending with the ASCII full stop */
while(buffer[4] != 0x2e)
{
/* Read the each elements example: 0x01, */
for(loop = 0; loop < 5; loop++)
{
buffer[loop] = fgetc(frp);
}
/* Change the elements char 0x01, 0 and 1 to number */
ch = ChangeChar2Number(buffer[2]);
ch *= 16;
ch = ch + ChangeChar2Number(buffer[3]);
/* save the elements changed to the bin file */
fputc(ch,fwp);
}
fclose(frp);
fclose(fwp);
frp = NULL;
fwp = NULL;
return 0;
}
其中上面的文件宏需要自己定义,file.txt文件是自己取模的保存十六进制数组的文件,后面是希望生成的bin文件的名称
下面是我的txt文件,该文件只有一行,最后以ASCII的句号结束:
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x48,0xFC,0xFC,0x48,0x48,0xFC,0xFC,0x48,0x48,0x00,0x00,0x10,0x30,0x48,0x40,0x30,0x08,0x48,0x30,0x10,0x00,0x00,0x00,0x00,0x40,0xA4,0x48,0x10,0x20,0x48,0x94,0x08,0x00,0x00,0x00,0x00,0x30,0x48,0x50,0x20,0x54,0x58,0x50,0x2C,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0xFC,0x78,0x78,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x10,0x20,0x40,0x40,0x78,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x08,0x30,0x08,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x38,0x40,0x40,0x30,0x08,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x30,0x40,0x40,0x70,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x78,0x08,0x10,0x10,0x20,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x30,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x38,0x08,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x30,0x30,0x10,0x20,0x00,0x00,0x00,0x00,0x08,0x30,0x40,0x80,0x40,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x10,0x08,0x10,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x08,0x10,0x20,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x30,0x48,0x98,0xA8,0xA8,0x98,0x40,0x30,0x00,0x00,0x00,0x00,0x10,0x28,0x28,0x44,0x7C,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x70,0x48,0x48,0x70,0x48,0x48,0x70,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x40,0x40,0x40,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x60,0x50,0x48,0x48,0x48,0x50,0x60,0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x40,0x78,0x40,0x40,0x78,0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x40,0x70,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x30,0x40,0x40,0x58,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x78,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,0x00,0x00,0x00,0x78,0x10,0x10,0x10,0x10,0x50,0x20,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x48,0x50,0x60,0x50,0x48,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,0x00,0x00,0x00,0x84,0xCC,0xB4,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x84,0xC4,0xA4,0x94,0x8C,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x84,0x84,0x84,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x70,0x48,0x48,0x70,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x84,0x84,0x84,0x48,0x30,0x0C,0x0C,0x00,0x00,0x00,0x70,0x48,0x48,0x50,0x60,0x50,0x48,0x44,0x00,0x00,0x00,0x00,0x30,0x48,0x40,0x30,0x08,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x50,0x50,0x50,0x20,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x94,0xAC,0xC4,0x00,0x00,0x00,0x00,0x00,0x84,0x48,0x30,0x30,0x48,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x48,0x48,0x48,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x10,0x20,0x40,0x80,0xF8,0x00,0x00,0x00,0x00,0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x70,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00,0x00,0x00,0x00,0x20,0x50,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x08,0x38,0x48,0x48,0x38,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x70,0x48,0x48,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x40,0x40,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x38,0x48,0x48,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x78,0x40,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x10,0x28,0x20,0x78,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x38,0x08,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x70,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x10,0x10,0x50,0x20,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x48,0x50,0x60,0x50,0x48,0x00,0x00,0x00,0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0xB4,0xB4,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x64,0x44,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x70,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x38,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x50,0x60,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x40,0x30,0x08,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x70,0x20,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x44,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0xB4,0xB4,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x48,0x30,0x30,0x48,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x48,0x48,0x38,0x08,0x48,0x30,0x00,0x00,0x00,0x00,0x78,0x08,0x10,0x20,0x40,0x78,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x20,0xC0,0xC0,0x20,0x20,0x18,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x60,0x10,0x10,0x0C,0x0C,0x10,0x10,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0xB4,0x88,0x00,0x00,0x00,0x00.