?? font.c
字號:
/***********************************************************
描述: 用c語言寫的一個如何從點陣字庫中讀取字符信息(像素寬 +點陣信息)
至于容錯性和效率方面還得使用者自行改善,謝謝您的參閱!
文件格式:
Unicode -- 文件頭+數(shù)據(jù)段(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; // 存儲當(dāng)前字符的檢索信息。 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;
}
/***************************************************************
功能: 初始化字體。 即打開字體文件,且讀取信息頭。
參數(shù): 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;
}
/********************************************************************
功能: 獲取當(dāng)前字符的像素寬度, 且將索引信息存入一個全局變量:g_dwCharInfo。
根據(jù)索引信息,即同時能獲取當(dāng)前字符的點陣信息的起始地址。
參數(shù): wCode -- 當(dāng)字庫為unicode編碼格式時,則將wCode當(dāng)unicode編碼處理。
否則反之(MBCS)。
********************************************************************/
int ReadCharDistX(WORD wCode)
{
if('U' == _fl_header.magic[0]) //unicode 編碼
return ReadCharDistX_U(wCode);
else
return ReadCharDistX_M(wCode);
}
/**********************************************************************
功能: 獲取點陣信息
參數(shù): wCode 在這里預(yù)留,主要是因為前面有保存一個全局的g_dwCharInfo,也就知道了該字符的相應(yīng)信息(寬度+點陣信息的起始地址)。
fontArray 存放點陣信息
bytesPerLine 每一行占多少個字節(jié)。
**********************************************************************/
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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -