不带缓存的FreeType使用

1、 初始化库

FT_Init_FreeType( FT_Library  *alibrary );

2、 通过创建一个新的 face 对象来打开一个字体文件

FT_New_Face( FT_Library   library,
               const char*  filepathname,
               FT_Long      face_index,
               FT_Face     *aface );

3、 以点或者象素的形式选择一个字符大小

  FT_Set_Char_Size( FT_Face     face,
                    FT_F26Dot6  char_width,
                    FT_F26Dot6  char_height,
                    FT_UInt     horz_resolution,
                    FT_UInt     vert_resolution );
  FT_Set_Pixel_Sizes( FT_Face  face,
                      FT_UInt  pixel_width,
                      FT_UInt  pixel_height );

4、 装载一个字形(glyph)图像,并把它转换为位图

(1)把一个字符码转换为一个字形索引

  FT_Get_Char_Index( FT_Face   face,
                     FT_ULong  charcode );

(2)从face中装载一个字形

  FT_Load_Glyph( FT_Face   face,
                 FT_UInt   glyph_index,
                 FT_Int32  load_flags );

(3)转换成bitmap位图

  FT_Glyph_To_Bitmap( FT_Glyph*       the_glyph,
                      FT_Render_Mode  render_mode,
                      FT_Vector*      origin,
                      FT_Bool         destroy );

以上1、2步可用以下函数实现,相当于调用FT_Get_Char_Index和FT_Load_Glyph:

  FT_Load_Char( FT_Face   face,
                FT_ULong  char_code,
                FT_Int32  load_flags );

5、 渲染(可选,斜体、加粗、下划线等)并绘制

FT_Set_Transform( FT_Face     face,
                    FT_Matrix*  matrix,
                    FT_Vector*  delta );

// 示例代码

FT_Library       pFTLib               =NULL;

FT_Face           pFTFace           = NULL;

FT_Glyph          glyph;

FT_UInt   glyph_index;

FT_Error  error = 0;

error =FT_Init_FreeType(&pFTLib);

if(error)

{

printf("error");

}

error = FT_New_Face(pFTLib,ttf, 0, &pFTFace);

if(error)

{

printf("error");

}

if(0 !=FT_Set_Char_Size(pFTFace, 0,  16<<6, 72, 72))

{

printf("error");

}

glyph_index =FT_Get_Char_Index(pFTFace, *char);

FT_Load_Glyph(pFTFace,glyph_index, FT_LOAD_MONOCHROME | FT_LOAD_RENDER);

error =FT_Get_Glyph(pFTFace->glyph, &glyph);

if(!error)

{

FT_Glyph_To_Bitmap(&glyph,FT_RENDER_MODE_NORMAL, 0, 0);

FT_BitmapGlyph    bitmap_glyph = (FT_BitmapGlyph)glyph;

FT_Bitmap      bitmap = bitmap_glyph->bitmap;

// 把点阵数据(bitmap)绘制到具体的显示设备上去

}

带缓存的FreeType使用

1、初始化库

FT_Init_FreeType( FT_Library  *alibrary );

2、创建cache manager

  FTC_Manager_New( FT_Library          library,
                   FT_UInt             max_faces,
                   FT_UInt             max_sizes,
                   FT_ULong            max_bytes,
                   FTC_Face_Requester  requester,
                   FT_Pointer          req_data,
                   FTC_Manager        *amanager );

3、创建charmap cache

  FTC_CMapCache_New( FTC_Manager     manager,
                     FTC_CMapCache  *acache );

4、创建cache来存储字形位图数据

  FTC_SBitCache_New( FTC_Manager     manager,
                     FTC_SBitCache  *acache );

5、使用charmap cache把字符编码转化成字形索引

  FTC_CMapCache_Lookup( FTC_CMapCache  cache,
                        FTC_FaceID     face_id,
                        FT_Int         cmap_index,
                        FT_UInt32      char_code );

6、在给定的sbit cache中查找字形位图

  FTC_SBitCache_LookupScaler( FTC_SBitCache  cache,
                              FTC_Scaler     scaler,
                              FT_ULong       load_flags,
                              FT_UInt        gindex,
                              FTC_SBit      *sbit,
                              FTC_Node      *anode );

// 示例代码

FT_Library       pFTLib               =NULL;

FT_Face           pFTFace           = NULL;

FTC_Manager cache_manager= 0;

FTC_CMapCachecmap_cache;

FTC_SBitCachesbit_cache;

FT_UInt glyph_idx;

FTC_ScalerReccurrent_ic;

FTC_Scalerselected_ic;

FTC_SBit bitmap;

FT_Error  err = 0;

err =FT_Init_FreeType(&pFTLib);

if(err)

{

printf("error");

}

err = FTC_Manager_New(pFTLib,get_faces_to_allocate(), 0, 0,

fts_face_requester,(FT_Pointer)NULL, &cache_manager);

if (err)

{

printf("error");

}

err =FTC_CMapCache_New(cache_manager, &cmap_cache);

if (err)

{

printf("error");

}

err =FTC_SBitCache_New(cache_manager, &sbit_cache);

if (err)

{

printf("error");

}

glyph_idx =FTC_CMapCache_Lookup(cmap_cache, current_ic.face_id, -1, char[k]);

if (glyph_idx)

{

selected_ic = &current_ic;

}

if(FTC_SBitCache_LookupScaler(sbit_cache, selected_ic, FT_LOAD_DEFAULT,

glyph_idx,&bitmap, (FTC_Node*)NULL))

{

printf("error");

}

// 把点阵数据(bitmap)绘制到具体的显示设备上去

freetype 函数介绍相关推荐

  1. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  2. C语言中的scanf()函数介绍

    1.scanf函数:读取从键盘输入的数据 在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据 getchar().get ...

  3. 延时函数介绍和呼吸灯的实现

    文章目录 延时函数介绍 呼吸灯原理 杨桃32学习笔记,本文图片文字皆为转述 延时函数介绍 分为delay_s秒,delay_ms毫秒,delay_us微秒延时,最大参数不能超过65535. 呼吸灯原理 ...

  4. ×××S 2012 参照函数 -- 介绍

    ×××S 2012 参照函数 -- 介绍 在×××S中,一张报表内可以同时包含多个数据集,但是一个数据区域就仅限于一个数据集,如果希望同时参考多个数据集,查找函数就能轻松办到,其概念类似JOIN是通过 ...

  5. 【 MATLAB 】rem 函数介绍

    rem函数和mod函数很相似,二者认真看一个,另一个看一下区别即可. mod函数介绍:[ MATLAB ]mod 函数介绍 rem Remainder after division Syntax r ...

  6. 【 MATLAB 】filter 函数介绍 之 Filter Data in Sections

    [ MATLAB ]filter 函数介绍(一维数字滤波器) 在上篇博文中,里面有一个例子,就是过滤部分中的数据,这个部分中的数据的意思是如果有一个向量需要过滤,我们可以把它分为几段,然后分段过滤. ...

  7. swift1.2语言函数和闭包函数介绍

    swift1.2语言函数和闭包函数介绍 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护. swift1.2语言函 ...

  8. php函数介绍,PHP函数介绍_PHP教程

    PHP函数介绍 基本使用: 函数定义形式: function 函数名(形参1,形参2,...) { //函数体(代码块): } 函数调用形式: 本质上就是使用一个名字来达到执行其中函数中的的作用.通常 ...

  9. Json模块dumps、loads、dump、load函数介绍

    转自:http://blog.csdn.net/mr_evanchen/article/details/77879967 Json模块dumps.loads.dump.load函数介绍 1.json. ...

最新文章

  1. 2021年大数据常用语言Scala(二十二):函数式编程 映射 map
  2. python sys.argv[] 的作用
  3. 导入android studio项目,编译失败
  4. 服务器搭建tomcat,通过url访问视频
  5. Spark数据倾斜的完美解决
  6. 硬件:关于CPU超频知识笔记
  7. PDE双曲型方程数值解形式及例题分析
  8. 机器学习1.1--模型和代价函数
  9. v9更新系统后为何显示服务器连接,V9服务器
  10. LeetCode(62):不同路径
  11. 20191021:(leetcode习题)乘积小于K的子数组
  12. 批处理(bat)没有后缀的文件怎么复制?
  13. php中如何从键盘获取,在javascript中如何获取键盘的keyCode
  14. OPNET中使用外部文件
  15. 算法:两种对拼音进行智能切分的方法
  16. Vue的一些API理解整理,如何一次引入多次调用
  17. C语言入门基础知识笔记
  18. ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57,A72
  19. .NetCore生成海报+二维码(logo)
  20. 转载:图像抠图算法学习 -Shared Sampling for Real-Time Alpha Matting

热门文章

  1. Python 之 如何一行输入多个整数
  2. java jtextarea 监听文本_Java Swing JTextArea文本区域的实现示例
  3. web网页设计期末课程大作业:红色中国文化主题网站设计——灌篮高手(4页)HTML+CSS
  4. 浏览器无法连接网络,学校校园网无法跳转到登录页面
  5. 队列的顺序实现(入队、出队、对长、获取队头元素)
  6. scrapy爬虫 出现10054错误 远程主机强迫关闭了一个现有的连接
  7. marshmallow库的简单学习
  8. 主成分分析(PCA)(principal component analysis)
  9. 现在有哪些好的国外的云服务器网站(国内可以直接上的那种)?
  10. 注解-Annotation