freetype字体

freetype字体概念
分配、设置、注册FontOpr结构体,由Font_manager.c通过链表管理。

static T_FontOpr g_tFreeTypeFontOpr = {
	.name          = "freetype",
	.FontInit      = FreeTypeFontInit,	//FreeType字体模块的初始化函数
	.GetFontBitmap = FreeTypeGetFontBitmap,	//根据编码值获得字符的位图
	.SetFontSize   = FreeTypeSetFontSize,	//设置字符的尺寸(单位:色素)
};

FreeType字体模块的初始化函数,参数:文件,字体大小。

static int FreeTypeFontInit(char *pcFontFile, unsigned int dwFontSize){
	FT_Init_FreeType(&g_tLibrary ); //初始化库		
	FT_New_Face(g_tLibrary, pcFontFile, 0, &g_tFace); //创建face对象	
	g_tSlot = g_tFace->glyph;	//定义 槽
	FT_Set_Pixel_Sizes(g_tFace, dwFontSize, 0); //设置字体大小
	return 0;
}

获得UNICODE字符的FreeType位图,参数:Unicode码,字体点阵信息

static int FreeTypeGetFontBitmap(unsigned int dwCode, PT_FontBitMap ptFontBitMap){
	int iPenX = ptFontBitMap->iCurOriginX;
	int iPenY = ptFontBitMap->iCurOriginY;

	/* load glyph image into the slot (erase previous one) */
	FT_Load_Char(g_tFace, dwCode, FT_LOAD_RENDER | FT_LOAD_MONOCHROME);	//render和单色位图
	//设置FontBitMap结构体
	ptFontBitMap->iXLeft    = iPenX + g_tSlot->bitmap_left;
	ptFontBitMap->iYTop     = iPenY - g_tSlot->bitmap_top;
	ptFontBitMap->iXMax     = ptFontBitMap->iXLeft + g_tSlot->bitmap.width;
	ptFontBitMap->iYMax     = ptFontBitMap->iYTop  + g_tSlot->bitmap.rows;
	ptFontBitMap->iBpp      = 1;
	ptFontBitMap->iPitch    = g_tSlot->bitmap.pitch;
	ptFontBitMap->pucBuffer = g_tSlot->bitmap.buffer;	
	ptFontBitMap->iNextOriginX = iPenX + g_tSlot->advance.x / 64;
	ptFontBitMap->iNextOriginY = iPenY;
	return 0;
}

设置字符的尺寸(单位:色素)

static void FreeTypeSetFontSize(unsigned int dwFontSize){
	FT_Set_Pixel_Sizes(g_tFace, dwFontSize, 0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值