zoukankan      html  css  js  c++  java
  • 文字显示例子

    FreeType是一个完全开源的、可扩展、可定制且可移植的字体引擎,它提供
    TrueType字体驱动的实现统一的接口来访问多种字体格式文件,包括点阵字、TrueType、OpenType、Type1、
    CID、CFF、Windows FON/FNT、X11 PCF等。FreeType函数库具有以下特点:
    (1)它使得客户应用程序可以方便地访问字体文件,无论字体文件存储在哪
    里,并且与字体格式无关。
    (2)能方便地提取全局字体数据,这些数据普遍存在于一般的字体格式中。
    (例如:全局度量标准,字符编码/字符映射表,等等)
    (3)能方便地提取某个字符的字形数据(度量标准,图像,名字等其他任何
    数据)
    (4)具备访问字体格式特定的功能(例如:SFNT表,多重控制,OpenType
    轮廓表)
    使用FreeType引擎来显示字符的流程如图.2所示(FreeType Team,2008)。
    首先需要初始化FreeType库,然后依次根据字符的编码处理一个字符,把它
    转化为点阵的位图信息,最后根据字符的信息,在相应的地方把它显示出来。
    根据以上流程图相应的函数如下:
    (1)首先对FreeType库进行初始化,并且读取矢量字库文件。
    FT_Init_FreeType(&library);//创建新的库对象,准备作其他操作时使用
    FT_New_Face(library,filename,0,&face);
    FT_Init_FreeType()他会缺省地注册一些模块。这个方式中,模块列表在构
    建时动态计算,并依赖ftinit部件的内容。
    FT_New_Face()通常用来创建外观对象,如果函数调用成功,返回0。外观对
    象包含一些用来描述全局字体数据的属性,可以被客户程序直接访问。它包括外
    观中字形的数量、外观家族的名称、风格名称、EM大小等。这个函数包括的参
    数library是一个全局的变量,而filename是矢量字库的路径(c文件路径名)。
    这里通过以上两个步骤首先建立了FreeType库的一个实例。然后使用一个字
    库文件来得到字体的face对象接口。
    (2)得到face对象之后,需要设置当前字体的属性,尺寸对象的内容可以通
    过调用函数FT_Set_Pixel_Sizes()来改变。
    当一个新的face对象建立时,对于可伸缩字体格式,size对象默认值为字符
    大小水平和垂直均为10象素。对于定长字体格式,这个大小是未定义的,所以必
    须在装载一个字形前设置该值。
    FT_Set_Pixel_Sizes(face,//当前face对象
    16,//字符点阵宽度
    16//字符点阵高度
    );
    以上函数把字符象素设置为16*16象素,因此最后的位图信息就是16*16点阵
    象素。
    (3)设置完字体的属性之后,需要得到字符的轮廓信息。
    一个face对象包含一个或多个字符表(charmap),字符表是用来转换字符码到
    字形索引的。TrueType字体文件通常包含两个字符表,一个用来转换Unicode字
    符码到字形索引,另一个用来转换Apple Roman编码到字形索引。这样的字体既
    可以用于Windows(使用Unicode),同时又可用于Macintosh(使用Apple Roman)。
    另外需要注意,一个特定的字符表可能没有覆盖完字体里面的全部字形。
    当新建一个face对象时,它默认选择Unicode字符表。根据字符的Unicode编
    码来得到它的glyph索引。代码如下:
    FT_Get_Char_Index(face,charcode);
    这个函数会在face里被选中的字符表中查找与给出的字符码对应的字形索
    引。从face中来得到字符对应的glyph后,需要读取到glyph slo(t存储字形的对象:
    字形槽)中才能使用。
    FT_Load_Glyph(face,glyph_index,FT_LOAD_DEFAULT);
    FT_Load_Glyph()的第三个参数是装载标志load_flags,其值是位标志集合,
    用来指示某些特殊操作的,默认值为FT_LOAD_DEFAULT即0。这个函数会设法
    从face中装载对应的字形图像。
    然后通过FT_Get_Glyph()简单地提取一个字形图像。
    FT_Get_Glyph(face->glyph,&glyph);
    最后把字形对象转换成一个位图:
    FT_Glyph_To_Bitmap(&glyph,FT_RENDER_MODE_NORMAL,0,1);
    glyph是源字形句柄的地址;第二个参数是标准的渲染模式;第三个参数是
    二维矢量的指针,该二维矢量是在转换前用来平移源字形图像的,该指针为0时
    表明渲染前不需要平移源字形;最后一个参数是一个布尔值,用来指示该函数是
    否要销毁源字形对象。
    bitmap=(FT_BitmapGlyph)glyph;
    经过转化之后,字体的点阵信息就存放在bitmap参数里面,再把点阵信息写
    入OSD的buffer中,即可显示出相应的字符。
    依据以上算法,将FreeType应用到高清播放机中时,能正常显示菜单界面字
    幕。然而在播放影片的过程中,srt字幕显示过慢,无法跟进视频播放的进度,滞
    后现象非常严重。

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/saintevil/archive/2010/07/19/5747582.aspx

  • 相关阅读:
    Encrypted Handshake Message
    RSAParameters Struct
    What if JWT is stolen?
    What's the difference between JWTs and Bearer Token?
    RSA Algorithm Example
    第18届Jolt大奖结果公布
    Ruby on rails开发从头来(windows)(三十六) 调试技巧
    Ruby on rails开发从头来(四十二) ActiveRecord基础(主键和ID)
    YouTube开放基础技术架构 让用户建自家YouTube
    Ruby on rails开发从头来(四十) ActiveRecord基础(Boolean属性)
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1965960.html
Copyright © 2011-2022 走看看