⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 font.c

📁 字库制作软件
💻 C
字号:
/***********************************************************
描述:	用c语言写的一个如何从点阵字库中读取字符信息(像素宽 +点阵信息)
        至于容错性和效率方面还得使用者自行改善,谢谢您的参阅!

文件格式: 
		Unicode -- 文件头+数据段(section)+索引表+点阵信息
		MBCS_Ladin-文件头+索引表+点阵信息
		MBCS_CJK-- 文件头+点阵信息
		
作者:  wujianguo
日期: 	20090516
MSN:    wujianguo19@hotmail.com
qq:    9599598
*************************************************************/

#include "font.h"
#include "unicode\unicode.h"
#include "mbcs\mbcs.h"

FILE *g_prf = NULL;
FL_HEADER _fl_header;
DWORD g_dwCharInfo = 0;    // 存储当前字符的检索信息。  bit0~bit25:存放点阵信息的起始地址。 bit26~bit31:存放像素宽度。

static int ReadFontHeader(PFL_HEADER pfl_header)
{	
	fread(pfl_header, sizeof(FL_HEADER) -4, 1, g_prf);

	//检测表示头
	if((_fl_header.magic[0] != 'U' && _fl_header.magic[0] != 'M')
		|| _fl_header.magic[1] != 'F' || _fl_header.magic[2] != 'L')
	{
		printf("Cann't support file format!\n");
		return 0;
	}

	if('U' == pfl_header->magic[0])     //unicode 编码
	{
		return ReadFontSection();
	}

	return 1;	
}

static int OpenFontFile(char *pFontFile)
{
	if((g_prf = fopen(pFontFile, "rb")) == NULL)
	{
		printf("Cann't open : %s\n", pFontFile);
		return 0;
	}
		
	return 1;
}

/***************************************************************
功能: 初始化字体。 即打开字体文件,且读取信息头。
参数: pFontFile--字库文件名      
***************************************************************/
int InitFont(char *pFontFile)
{
	memset(&_fl_header, 0, sizeof(FL_HEADER));

	if(OpenFontFile(pFontFile))
		return ReadFontHeader(&_fl_header);	
	else
		return 0;
}

void ExitFont()
{
	if('U' == _fl_header.magic[0])     //unicode 编码
		ReleaseSection();
}

BYTE GetFontYSize()
{
	return _fl_header.YSize;
}


/********************************************************************
功能: 获取当前字符的像素宽度, 且将索引信息存入一个全局变量:g_dwCharInfo。
        根据索引信息,即同时能获取当前字符的点阵信息的起始地址。
参数: wCode -- 当字库为unicode编码格式时,则将wCode当unicode编码处理。
                否则反之(MBCS)。
********************************************************************/
int ReadCharDistX(WORD wCode)
{
	if('U' == _fl_header.magic[0])     //unicode 编码
		return ReadCharDistX_U(wCode);
	else
		return ReadCharDistX_M(wCode);
}

/**********************************************************************
功能: 获取点阵信息
参数: wCode 在这里预留,主要是因为前面有保存一个全局的g_dwCharInfo,也就知道了该字符的相应信息(宽度+点阵信息的起始地址)。
       fontArray 存放点阵信息
	   bytesPerLine 每一行占多少个字节。
**********************************************************************/
int ReadCharDotArray(WORD wCode, BYTE *fontArray, WORD *bytesPerLine)
{	
	*bytesPerLine= (WORD)((GET_FONT_WIDTH(g_dwCharInfo))+7)/PIXELS_PER_BYTE;	

	if(g_dwCharInfo > 0)
	{		
		DWORD nDataLen = *bytesPerLine * _fl_header.YSize;			
		DWORD  dwOffset = GET_FONT_OFFADDR(g_dwCharInfo);    //获取字符点阵的地址信息(低26位)
		
		fseek(g_prf, dwOffset, SEEK_SET);
		fread(fontArray, nDataLen, 1, g_prf);	
		
		return 1;
	}
	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -