利用freetype显示unicode字符

使用freetype加载矢量字库,ttf字体文件,通过字符的unicode,load一个字符的点阵!汉字的unicode使用32bit既可表达,比如‘’我‘’的unicode是0x6211


定义全局变量

static FT_Library g_lib;
static FT_Face g_face;
初始化freetype

<pre name="code" class="cpp">pShowScreen<span style="font-family: Arial, Helvetica, sans-serif;">是frambuffer的映射内存地址。</span>
int Show_Char(int Unicode,int FontSizePixel,MID_FONT_COLOR fontColor,int StartX,int StartY){
         int charUnicode = Unicode;
	int index,x,y;
	FT_Glyph glyph;
	unsigned short int *pShowLine;
	int error;
	index =0;x=0;y =0;

	if(pShowScreen == NULL) {printf("<Use OSD_Init not yet!!!> \n");return -1;}

    	pShowLine = (unsigned short int*) (pShowScreen );
	
	error =  FT_Set_Pixel_Sizes(g_face,FontSizePixel,FontSizePixel);
	if(error != 0) {
		return HI_FAILURE;
	}
	index =  FT_Get_Char_Index(g_face,charUnicode);

        error = FT_Load_Glyph(g_face,index, FT_LOAD_DEFAULT);
   	
	error = FT_Get_Glyph(g_face->glyph, &glyph);

	if(!error){
        
        error = FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1);
		
		
        FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph) glyph;
        FT_Bitmap *bitmap = &bitmap_glyph -> bitmap;
		
		
        for (y = StartY; y < bitmap->rows + StartY; ++y) {
            for (x = StartX; x < bitmap->width + StartX; ++x) {

		if(x < 0 || y < 0) continue;

	       if(bitmap->buffer[(y-StartY)* bitmap->width + (x-StartX)]){
                      *(pShowLine + y * var.xres + x) = fontColor;
		}else{
                  
		}
            }
        }
        FT_Done_Glyph(glyph);
        glyph = NULL;	
	}else return  -1;
	return 0;
}

MSG_PRINT("init error:%d,errno:%d \n",error,errno);}error = FT_New_Face(g_lib,fontFile, 0, &g_face);if(error != 0) { MSG_PRINT("init FreeType error, please check font file \n "); return -1;}error = FT_Select_Charmap(g_face, ft_encoding_unicode);if(error != 0) {return -1;}
 

load unicode



释放freetype

int FreeType_Realse(){
	FT_Done_Face(g_face);
	FT_Done_FreeType(g_lib);
	return 0;
}


这份文档提供了FreeType 2函数库设计与实现的细节。本文档的目标是让开发人员更好的理解FreeType 2是如何组织的,并让他们扩充、定制和调试它。 首先,我们先了解这个库的目的,也就是说,为什么会写这个库: * 它让客户应用程序方便的访问字体文件,无论字体文件存储在哪里,并且与字体格式无关。 * 方便的提取全局字体数据,这些数据在平常的字体格式中普遍存在。(例如:全局度量标准,字符编码/字符映射表,等等) * 方便的提取某个字符的字形数据(度量标准,图像,名字,其他任何东西) * 访问字体格式特定的功能(例如,SFNT表,多重控制,OpenType轮廓表) Freetype 2的设计也受如下要求很大的影响: * 高可移植性。这个库必须可以运行在任何环境中。这个要求引入了一些非常激烈的选择,这些是FreeType2的低级系统界面的一部分。 * 可扩展性。新特性应该可以在极少改动库基础代码的前提下添加。这个要求引入了非常简单的设计:几乎所有操作都是以模块的形式提供的。 * 可定制。它应该能够很容易建立一个只包含某个特定项目所需的特性的版本。当你需要集成它到一个嵌入式图形库的字体服务器中时,这是非常重要的。 * 简洁高效。这个库的主要目标是只有很少cpu和内存资源的嵌入式系统。 这份文档的其他部分分为几个部分。首先,一些章节介绍了库的基本设计以及Freetype 2内部对象/数据的管理。 接下来的章节专注于库的定制和与这个话题相关的系统特定的界面,如何写你自己的模块和如何按需裁减库初始化和编译。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

john_liqinghan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值