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 ...
随机推荐
- 软考自查:UML建模
UML建模 内容提要 用例图 类图与对象图 顺序图 活动图 状态图 通信图 构件图 用例图 包含关系 扩展关系 泛化关系 类图与对象图 填类名,方法名,属性名 填多重度 填关系 1: ...
- Django使用redis实现缓存
实现缓存的方式,有多种:本地内存缓存,数据库缓存,文件系统缓存.这里介绍使用Redis数据库进行缓存. 配置 CACHES = { "default": { "BACKE ...
- js可拖拽的div
function chatDrag(div1) { div1.onmousedown = function (ev) { var oevent = ev || event; var distanceX ...
- PowerDesigner概念(概念数据模型概述)
- [C#]将数据写入已存在的excel文件
测试如下(xls/xlsx): //将数据写入已存在Excel public static void writeExcel(string result, string filepath) { //1. ...
- final model for bioinformatics
final model for bioinformatics 模拟真实的生物系统,从有机分子到细胞,到组织,到器官,到个体,到家系,到群体. 正确的设计结构,可拓展性,可塑性. 良好的可视化. 面向对 ...
- Boxes and Balls UVALive - 7500(练习赛爆零)
原因: 自身: 1.自己并没有考虑过精度所带来的问题. 2.一定要自己读题,独立思考,末被队友带偏(矛盾出真理). 3.加强自身基础,提高自身实力. 队伍: 1.队友缺乏独立思考,需要加强. 题目描述 ...
- Confluence 6 针对 'unmigrated-wiki-markup' 宏重新尝试合并
在签名的章节中,我们主要是针对没有完全合并完成余下的为合并内容的异常处理.最常见的情况是内容以及被合并了,但是页面使用 wiki 标记的内容没有被合并,通常这些 wiki 标记的内容使用了 'unmi ...
- JMM - Java内存模型
内存模型的作用是定义变量的访问规则.包含:实例字段.静态字段.构成数组对象的元素.不包括局部变量和方法参数等线程私有变量. JMM所有变量都在主存,每个线程都有自己的工作内存.线程的工作内存中保存了线 ...
- 关于生物项目上的blast和viroblast
最近要做一个跟生物有关的项目,隔行如隔山呀,好多工具以前都没听过,blast分到我头上啦,查查,查查 BLAST (Basic Local Alignment Search Tool)是一套在蛋白质数 ...