FreeType使用的总结
来源:互联网 发布:photoshop mac安装 编辑:程序博客网 时间:2024/05/17 06:08
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
10 if (error)
11 {
12 return NULL;
13 }
14 //加粗
15 FT_Pos xBold = 32;
16 FT_Pos yBold = 32;
17 if (m_bBold)
18 {
19 if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_OUTLINE)
20 {
21 FT_BBox oldBox;
22 FT_Outline_Get_CBox(&m_ftSlot->outline , &oldBox);
23 error = FT_Outline_Embolden(&m_ftSlot->outline, xBold);
24
25 FT_BBox newBox;
26 FT_Outline_Get_CBox(&m_ftSlot->outline , &newBox);
27 xBold = (newBox.xMax - newBox.xMin) - (oldBox.xMax - oldBox.xMin);
28 yBold = (newBox.yMax - newBox.yMin) - (oldBox.yMax - oldBox.yMin);
29 }
30 else if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_BITMAP)
31 {
32 FT_Library ftLibrary = FTFaceMgr::GetInstance()->GetFTLibrary();
33 error = FT_Bitmap_Embolden( ftLibrary, &m_ftSlot->bitmap, xBold, yBold );
34 }
35 }
36 //斜体
37 if (m_bItailc)
38 {
39 if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_OUTLINE)
40 FT_Outline_Transform(&m_ftSlot->outline, &m_matItailc);
41 }
42
43 //FT_Error error = FT_Render_Glyph(m_ftSlot, FT_RENDER_MODE_MONO);
44 if (m_ftFace->glyph->format != FT_GLYPH_FORMAT_BITMAP)}
45 {
46 error = FT_Render_Glyph(m_ftSlot, FT_RENDER_MODE_NORMAL);
47 }
在这里可以看到:
如果是加载时已经是FT_LOAD_RENDER,那么m_ftFace->glyph->format就是FT_GLYPH_FORMAT_BITMAP;
否则就是FT_GLYPH_FORMAT_OUTLINE。
这时候加粗和斜体都可以在代码中看到如果实现。
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
10 if (error)
11 {
12 return NULL;
13 }
14 //加粗
15 FT_Pos xBold = 32;
16 FT_Pos yBold = 32;
17 if (m_bBold)
18 {
19 if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_OUTLINE)
20 {
21 FT_BBox oldBox;
22 FT_Outline_Get_CBox(&m_ftSlot->outline , &oldBox);
23 error = FT_Outline_Embolden(&m_ftSlot->outline, xBold);
24
25 FT_BBox newBox;
26 FT_Outline_Get_CBox(&m_ftSlot->outline , &newBox);
27 xBold = (newBox.xMax - newBox.xMin) - (oldBox.xMax - oldBox.xMin);
28 yBold = (newBox.yMax - newBox.yMin) - (oldBox.yMax - oldBox.yMin);
29 }
30 else if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_BITMAP)
31 {
32 FT_Library ftLibrary = FTFaceMgr::GetInstance()->GetFTLibrary();
33 error = FT_Bitmap_Embolden( ftLibrary, &m_ftSlot->bitmap, xBold, yBold );
34 }
35 }
36 //斜体
37 if (m_bItailc)
38 {
39 if (m_ftFace->glyph->format == FT_GLYPH_FORMAT_OUTLINE)
40 FT_Outline_Transform(&m_ftSlot->outline, &m_matItailc);
41 }
42
43 //FT_Error error = FT_Render_Glyph(m_ftSlot, FT_RENDER_MODE_MONO);
44 if (m_ftFace->glyph->format != FT_GLYPH_FORMAT_BITMAP)}
45 {
46 error = FT_Render_Glyph(m_ftSlot, FT_RENDER_MODE_NORMAL);
47 }
在这里可以看到:
如果是加载时已经是FT_LOAD_RENDER,那么m_ftFace->glyph->format就是FT_GLYPH_FORMAT_BITMAP;
否则就是FT_GLYPH_FORMAT_OUTLINE。
这时候加粗和斜体都可以在代码中看到如果实现。
阅读全文
0 0
- FreeType使用的总结
- freetype的使用及总结
- FreeType的使用
- Freetype的使用
- freeType 的使用流程
- FreeType的使用
- FreeType的使用
- freetype的使用
- freetype的安装与使用
- freetype 总结
- freetype使用
- Freetype 使用
- 使用 FreeType
- freetype-2.4.10.tar.bz2的使用
- 使用FreeType实现DirectX11的文本输入
- 文本处理以及freetype的使用
- freetype的安转和使用
- freetype 使用小结
- Android中的AutoCompleteTextView(随笔提示文本)组件的简单使用
- ConcurrentLinkedDeque--未完成
- Java 线程池ThreadPoolExecutor(基于jdk1.8)(二)
- WEB_02_JSP/Servlet及相关技术详解
- Linux下实现mysql主从数据库读写分离
- FreeType使用的总结
- 修改网页的alert弹框样式让你的页面更美观(js封装之路(1.1))
- codeforces 842D Trie 树异或不存在的最小值
- java强引用、软引用、弱引用、虚引用
- C# 实践1——与数据库相关的窗体
- 构建我的第一个react项目
- 超星尔雅生态文明撑起美丽中国梦答案
- 校验手机号正则表达式
- opengl官网