http://www.cppblog.com/liangairan/archive/2016/09/11/214270.html

这里说一下Freetype的关键点,比较基础的在很多文章已经有说明,这里就不详细说明了。

FreeType每个字符的加载,可以影响到后面对字符图像的处理。

在这里说明一下,字符的加载有多种方式,调用函数是:

            FT_Load_Char( FT_Face   face,

                FT_ULong  char_code,
                FT_Int32  load_flags );

其中的参数load_flags决定了加载后字体图像的属性。

这里只对常用的进行解释:

关闭抗锯齿:FT_LOAD_MONOCHROME(这个其实是加载1位bmp位图)

打开抗锯齿:FT_LOAD_FORCE_AUTOHINT

加载时就已经生成图像:FT_LOAD_RENDER

加载时不生成图像:FT_LOAD_NO_BITMAP(注意:这里需要在加载后调用FT_Render_Glyph)

下面是代码示例:

 1     FT_Error error = 0;

 2     FT_Int32 nLoadFlag = m_type.m_nFontHint == FONT_MONO ? FT_LOAD_FORCE_AUTOHINT | FT_LOAD_MONOCHROME : 

                           FT_LOAD_FORCE_AUTOHINT | FT_LOAD_RENDER;/*FT_LOAD_NO_BITMAP*/;

 3     error = FT_Load_Char(m_ftFace, wCH, nLoadFlag);

 4 

 5     if (error)

 6     {

 7         error = FT_Load_Char(m_ftFace, wCH, FT_LOAD_DEFAULT);

 8     }

 9 

     if (error)

     {

         return NULL;

     }

     //加粗

     FT_Pos xBold = 32; 

     FT_Pos yBold = 32;

     if (m_bBold)

     {

         if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_OUTLINE)

         {

             FT_BBox oldBox;

             FT_Outline_Get_CBox(&m_ftSlot->outline , &oldBox);

             error = FT_Outline_Embolden(&m_ftSlot->outline, xBold);

 

             FT_BBox newBox;

             FT_Outline_Get_CBox(&m_ftSlot->outline , &newBox);

             xBold = (newBox.xMax - newBox.xMin) - (oldBox.xMax - oldBox.xMin);

             yBold = (newBox.yMax - newBox.yMin) - (oldBox.yMax - oldBox.yMin);

         }

         else if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_BITMAP)

         {

             FT_Library ftLibrary = FTFaceMgr::GetInstance()->GetFTLibrary();

             error = FT_Bitmap_Embolden( ftLibrary, &m_ftSlot->bitmap, xBold, yBold );

         }

     }

     //斜体

     if (m_bItailc)

     {

         if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_OUTLINE)

             FT_Outline_Transform(&m_ftSlot->outline, &m_matItailc);

     }

 

     //FT_Error error = FT_Render_Glyph(m_ftSlot, FT_RENDER_MODE_MONO);

     if (m_ftFace->glyph->format != FT_GLYPH_FORMAT_BITMAP)}

     {

         error = FT_Render_Glyph(m_ftSlot, FT_RENDER_MODE_NORMAL);

     }



在这里可以看到:

如果是加载时已经是FT_LOAD_RENDER,那么m_ftFace->glyph->format就是FT_GLYPH_FORMAT_BITMAP;

否则就是FT_GLYPH_FORMAT_OUTLINE。

这时候加粗和斜体都可以在代码中看到如果实现。

FreeType使用的总结的更多相关文章

  1. C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图

    C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图 +BIT祝威+悄悄在此留下版了个权的信息说: 最近需要用OpenGL绘制文字,这是个很费时费力的事.一般的思路就是 ...

  2. C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字

    C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字 上一篇实现了把文字绘制到OpenGL窗口,但实质上只是把含有文字的贴图贴到矩形模型上.本篇我们介绍用Poi ...

  3. C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字

    C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字 +BIT祝威+悄悄在此留下版了个权的信息说: 上一篇得到了字形贴图及其位置字典(可导出为XML).本篇就利用此贴 ...

  4. NeHe OpenGL教程 第四十三课:FreeType库

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. mac升级yosemite后安装gd的freetype扩展

    Mac升级系统到 Yosemite 10.10,对于各位Coder来说,还是需要一些时间来折腾的! @星空之下 同学反映 PHPCMS 的验证码图片不能正常显示,反馈该验证码需要GD库支持FreeTy ...

  6. Bug: freetype/fterrors.h: No such file or directory

    Bug描述: 安装PIL过程中出现题目中的错误信息,具体如下:

  7. 使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果

    前言: Freetype是一个跨平台.开源的字体渲染器,网上很多文章介绍,本人就不啰嗦了.本文重点在于实现文章标题所属的各种效果,不是Freetype的基本使用方法介绍文档,所以对于Freetype不 ...

  8. 基于Qt的FreeType字体轮廓解析

    一.本文目的 以前的文档中.详细的介绍了FreeType开源字体引擎库的基础知识.基本用法.但并未详细的阐明在TurboCG中.是如何解析出一个文字的轮廓的,本文集中阐述.怎么样使用FreeType开 ...

  9. Configure: error: freetype.h not found. 的解决办法

    出现 Configure: error: freetype.h not found. 的解决办法 CentOS yum install freetype-devel Debian apt-get in ...

  10. FreeType in OpenCASCADE

    FreeType in OpenCASCADE eryar@163.com Abstract. FreeType is required for text display in the 3D view ...

随机推荐

  1. MySQL之 视图,触发器,存储过程,函数,事物,数据库锁,数据库备份

    1.视图 视图: 是一个虚拟表,其内容由查询定义: 视图有如下特点;  1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系.  2. 视图是由基本表(实表)产生的表(虚表).  3. ...

  2. Javascript 中的数据类型判断

    (迁移自旧博客2017 09 25) typeof 我们常使用typeof来判断数据类型,在常规场景中足以应付数据类型判断的需要: var obj = { name: 'zhangxiang' }; ...

  3. Redhat终端中文乱码解决

    文件中的中文以及命令反馈的中文能够正常显示,但是在终端中用ls等命令查看文件时会出现乱码. 我在i18n文件中加了下面两行内容(本来只有第一行),后来就能正常显示了.

  4. 爬虫基础之requests模块

    1. 爬虫简介 1.1 概述 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 1.2 爬虫的价值 在互 ...

  5. Drools+springboot

    查看我的github, 后续会陆续补充文档和Drools技术 https://github.com/zongheng14/insurance-rules

  6. spring data jpa、Hibernate开启全球唯一UUID设置

    spring data jpa.Hibernate开启全球唯一UUID设置 原文链接:https://www.cnblogs.com/blog5277/p/10662079.html 原文作者:博客园 ...

  7. 网站性能测试工具 webbench 的安装和使用

    1.webbench的下载和安装 wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz sudo tar xvf we ...

  8. UI组件--element-ui--Upload多组件自定义上传

    需求: 提交详细信息的表单, 并上传对应图片(如下图), 后台接口要求表单数据和图片需要一次上传完成.. 分析: 实际上, 每个element-ui Upload组件都应发送一次请求, 很明显不符合我 ...

  9. xshell 使用root 连接ubuntu server

    下载一个虚拟机,安装Ubuntu server 下载一个xshell 第一步 :先使用账号登录 第二步:给root设置初始密码 sudo passwd root 第三步:切换root 账户,使用vi ...

  10. SpringBoot使用日志

    1.日志框架 日志门面 日志实现 JCL.SLF4J.jboss-logging Log4j.JUL.Log4j2.Logback 日志门面:SLF4J 日志实现:Logback SpringBoot ...