FreeType使用的总结
http://www.cppblog.com/liangairan/archive/2016/09/11/214270.html
这里说一下Freetype的关键点,比较基础的在很多文章已经有说明,这里就不详细说明了。
FreeType每个字符的加载,可以影响到后面对字符图像的处理。
在这里说明一下,字符的加载有多种方式,调用函数是:
FT_Load_Char( FT_Face face,
其中的参数load_flags决定了加载后字体图像的属性。
这里只对常用的进行解释:
关闭抗锯齿:FT_LOAD_MONOCHROME(这个其实是加载1位bmp位图)
打开抗锯齿:FT_LOAD_FORCE_AUTOHINT
加载时就已经生成图像:FT_LOAD_RENDER
加载时不生成图像:FT_LOAD_NO_BITMAP(注意:这里需要在加载后调用FT_Render_Glyph)
下面是代码示例:
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使用的总结的更多相关文章
- C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图
C#+OpenGL+FreeType显示3D文字(1) - 从TTF文件导出字形贴图 +BIT祝威+悄悄在此留下版了个权的信息说: 最近需要用OpenGL绘制文字,这是个很费时费力的事.一般的思路就是 ...
- C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字
C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字 上一篇实现了把文字绘制到OpenGL窗口,但实质上只是把含有文字的贴图贴到矩形模型上.本篇我们介绍用Poi ...
- C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字
C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字 +BIT祝威+悄悄在此留下版了个权的信息说: 上一篇得到了字形贴图及其位置字典(可导出为XML).本篇就利用此贴 ...
- NeHe OpenGL教程 第四十三课:FreeType库
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- mac升级yosemite后安装gd的freetype扩展
Mac升级系统到 Yosemite 10.10,对于各位Coder来说,还是需要一些时间来折腾的! @星空之下 同学反映 PHPCMS 的验证码图片不能正常显示,反馈该验证码需要GD库支持FreeTy ...
- Bug: freetype/fterrors.h: No such file or directory
Bug描述: 安装PIL过程中出现题目中的错误信息,具体如下:
- 使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果
前言: Freetype是一个跨平台.开源的字体渲染器,网上很多文章介绍,本人就不啰嗦了.本文重点在于实现文章标题所属的各种效果,不是Freetype的基本使用方法介绍文档,所以对于Freetype不 ...
- 基于Qt的FreeType字体轮廓解析
一.本文目的 以前的文档中.详细的介绍了FreeType开源字体引擎库的基础知识.基本用法.但并未详细的阐明在TurboCG中.是如何解析出一个文字的轮廓的,本文集中阐述.怎么样使用FreeType开 ...
- Configure: error: freetype.h not found. 的解决办法
出现 Configure: error: freetype.h not found. 的解决办法 CentOS yum install freetype-devel Debian apt-get in ...
- FreeType in OpenCASCADE
FreeType in OpenCASCADE eryar@163.com Abstract. FreeType is required for text display in the 3D view ...
随机推荐
- Java基础语法(二)之流程控制语句
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块 .控制语句分为三类:顺序,选择和循环. “顺序结构”代表”先执行a,再执行b”的逻辑.比如,先找个女朋友, ...
- VUE之图表操作
参考 v-charts文档有详细说明,不多做介绍. 感谢博主的梳理,我在此基础之上稍作修改 效果展示: 在工作中遇到了就记录下来,留作备用,以便今后查阅: 安装 npm install vue-sch ...
- Vue-admin工作整理(八): BUS | | 组件通信
一.父子组件之间通信 思路:定义一个个人组件,个人组件通常需要在前缀统一命名一下,如:AInput,该组件的作用是将编辑框中的内容获取并通过事件提交出去,然后在目标组件(store)中通过双向交互模式 ...
- vue--监听器
vue当中的属性,侦听器watch computed可以根据数据的变化而变化,而watch也具备同样的功能 既然这么相似,那么两者的区别是什么呢 首先是执行顺序上有一些细微差别,dom加载完成后将立即 ...
- HTML5外包注意事项-开发HTML5游戏的九大坑与解决方法剖析
随着移动社区兴起,势必带动HTML5的革命.未来一两年内,HTML5移动游戏必将呈现大爆发趋势. 以下是整理的HTML5游戏研发.市场趋势以及渠道布局和技术解决方案的内容.希望大家能从本文中找到对HT ...
- Cannot resolve classpath entry: /Program Files/IBM/SQLLIB/java/db2java.zip
在mybatis的逆向工程中,使用java代码和xml配置文件生成时出现以下的错误 原来自己在复制官方配置文件的参考时将这一句也复制了进来 删掉后运行即可!成功的话控制台是没有输出的
- WebForm服务器验证控件与前端js自定义验证共同使用
问题: 前端aspx页面中需要在button中添加OnClientClick事件后,这个OnClientClick所执行的自定义的客户端js验证:这个时候,所有的服务器验证控件都会失效! ...
- Java通过NIO实现快速文件拷贝的代码
将内容过程重要的内容片段做个记录,下面的内容段是关于Java通过NIO实现快速文件拷贝的内容. public static void fileCopy( File in, File out ) thr ...
- React文档(二十四)高阶组件
高阶组件(HOC)是React里的高级技术为了应对重用组件的逻辑.HOCs本质上不是React API的一部分.它是从React的组合性质中显露出来的模式. 具体来说,一个高阶组件就是一个获取一个组件 ...
- [leecode]---11.container with most water
description: Input: [1,8,6,2,5,4,8,3,7]Output: 49 思路1: 从(1,a1)开始向后算面积,需要两层n循环,时间复杂度n2 思路2: 找出数组中最大的数 ...