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. windows中cmd常用命令收集

    1.经常会启动端口后忘关,需要杀端口的命令:查找端口占用命令 netstat -ano|findstr 端口例如      (8081)      杀端口: taskkill /pid xxxxx - ...

  2. 论文阅读: Siam FC

    一.研究动机 一方面传统算法设计的跟踪模型过于简单,另一方面深度学习方法很难达到实时效果然而现实场景中的应用对速度要求较高. "shallow method"(HCFT)没有很好地 ...

  3. Git仓库删除大文件

    Git仓库删除大文件 背景 当用Git久了,难免会手误或临时添加一些大文件到仓库中,即使以后添加进了.gitignore,甚至做了git rm,但是Git为了保证版本可回退,history pack里 ...

  4. 关于Struts2自动装配和访问Servlet API

    自动装配 1.根据属性的getter和setter获取值  index.jsp <s:form action="hello" method="POST"& ...

  5. Pycharm快捷键设置(鼠标滚动控制字体大小)

    一.pycharm字体放大的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双击) ...

  6. P2822 组合数问题

    传送门 思路: 利用公式: C( n,r ) = C( n-1,r ) + C( n-1,r-1 ) 由此可以将计算 C( n,r ) 的过程化为加法来做. 可以看出,C( n,r ) 其实就是求杨辉 ...

  7. Bate冲刺 第四天

    1.各个成员今日完成的任务及对项目的贡献小时数 姓名 今日已完成任务 时间 马玉婷 特殊字符测试与完善 5h 马美玲 菜单栏测试与完善 5h 益西卓嘎 撰写博文 1h 2. 提供当天站立式会议照片一张 ...

  8. 【转】 glibc detected *** corrupted double-linked list:错误的原因有如下三种可能

    一个多线程的大程序运行的时候崩掉了,屏幕上打出这个:   *** glibc detected *** corrupted double-linked list: 0xb78381d8 *** 三个原 ...

  9. urllib库详解 --Python3

    相关:urllib是python内置的http请求库,本文介绍urllib三个模块:请求模块urllib.request.异常处理模块urllib.error.url解析模块urllib.parse. ...

  10. java.nio.file.NoSuchFileException

    springboot +es es 2.1.0 参考这个 https://www.cnblogs.com/yueshutong/p/9381543.html cluster-nodes :改成127. ...