`
javahigh1
  • 浏览: 1223183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

FreeType2的简单使用:平台无关的TrueType字体显示。

 
阅读更多

FreeType2的简单使用:
FreeType2是一个简单的跨平台的字体绘制引擎.目前支持TrueType Type1 Type2等字体格式.不过目前好象还不支持OpenType.
使用FreeType的应用很多.著名的FTGL就是使用FreeType的.能在OpenGL高效率的绘制矢量字体.
FTGL我没用过.因为不想在没了解该怎么用FreeType的情况下就去用FTGL.

经过一个晚上的阅读代码(我的代码阅读能力是很差的).终于知道了如何使用FreeType2了。不过是简单的使用,还不知道如何设置Bold Itainly等属性.主要是简单的演示.以后准备做成一个完善的字体引擎.
下面简单的介绍一下.

首先当然是包含头文件了。头文件要这样包含:
#include [ft2build.h]
#include FT_FREETYPE_H
不知道为什么.反正就是要这么包含.
以下为FT2的初始化代码.和绘制以及释放的代码>
注意这里绘制代码接受的字符是Unicode.表示你这样旧可以绘制了

FT2_Obj font;
font.Init("SimSun.ttf",32);
wchat_t pText[]=L"潘李亮是一头野猪";
for(int n = 0 ; n< wcslen(pText);n++)
{
font.DrawAUnicode(pText[n];
}
font.Free();

//以下为FT2_Obj的代码.
//主要参考了Nehe的Lesson 43
class FT2_Obj
{
FT_Library library;
int h ;
FT_Face face;

public:
void Init(const char * fname, unsigned int h);
void Free();
void DrawAUnicode(wchar_t ch)
};
void FT2_Obj::Init(const char * fname, unsigned int h)
{
this->h=h;

//初始化FreeType库..

if (FT_Init_FreeType( &library ))
throw std::runtime_error("FT_Init_FreeType failed");


//加载一个字体,取默认的Face,一般为Regualer
if (FT_New_Face( library, fname, 0, &face ))
throw std::runtime_error("FT_New_Face failed (there is probably a problem with your font file)");

//大小要乘64.这是规定。照做就可以了。
FT_Set_Char_Size( face,h<< 6,h << 6, 96, 96);
FT_Matrix matrix; /* transformation matrix */
FT_UInt glyph_index;
FT_Vector pen;

//给它设置个旋转矩阵
float angle = -20/180.* 3.14;
matrix.xx = (FT_Fixed)( cos( angle ) * 0x10000L );
matrix.xy = (FT_Fixed)(-sin( angle ) * 0x10000L );
matrix.yx = (FT_Fixed)( sin( angle ) * 0x10000L );
matrix.yy = (FT_Fixed)( cos( angle ) * 0x10000L );


FT_Set_Transform( face, &matrix, &pen );
}.


/*
绘制操作.
*/
void FT2_Obj::DrawAUnicode(wchar_t ch)
{
if(FT_Load_Glyph( face, FT_Get_Char_Index( face, ch ), FT_LOAD_DEFAULT ))
throw std::runtime_error("FT_Load_Glyph failed");

//得到字模
FT_Glyph glyph;
if(FT_Get_Glyph( face->glyph, &glyph ))
throw std::runtime_error("FT_Get_Glyph failed");

//转化成位图
FT_Render_Glyph( face->glyph, FT_RENDER_MODE_NORMAL );
FT_Glyph_To_Bitmap( &glyph, ft_render_mode_normal, 0, 1 );
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph;

//取道位图数据
FT_Bitmap& bitmap=bitmap_glyph->bitmap;

//把位图数据拷贝自己定义的数据区里.这样旧可以画到需要的东西上面了。
int width = bitmap.width;
int height = bitmap.rows;

usigned char* expanded_data = new usigned char[ 3 * width * height];

for(int j=0; j<height></height>< height ; j++)
{
for(int i=0; i < width; i++)
{
expanded_data[3*(i+(height-j-1)*width)]=
expanded_data[3*(i+(height-j-1)*width)+1] =
expanded_data[3*(i+(height-j-1)*width)+2] =
(i>=bitmap.width || j>=bitmap.rows) ?
0 : bitmap.buffer[i + bitmap.width*j];

}
}

}
}

void FT2_Obj::Free()
{
FT_Done_Face(face);
FT_Done_FreeType(library);
}

分享到:
评论

相关推荐

    国内首篇利用freetype的跨平台truetype字体真正轮廓(非位图)获取(带完整qt工程代码).rar

    国内首篇利用freetype的跨平台truetype字体真正轮廓(非位图)获取(带完整qt工程代码).rar 国内首篇利用freetype的跨平台truetype字体真正轮廓(非位图)获取(带完整qt工程代码).rar 国内首篇利用freetype的跨平台...

    freetype跨平台truetype字体真正轮廓 QT源码-绝对可用

    国内首篇利用freetype的跨平台truetype字体真正轮廓(非位图)获取(带完整qt工程代码)

    opencv3.4.14(带freetype)

    freetype使用方法: #include &lt;opencv2/opencv.hpp&gt; #include &lt;opencv2/freetype.hpp&gt; #pragma comment(lib,"opencv_world3414.lib") int main() { auto ft = cv::freetype::createFreeType2(); ft-&gt;loadFontData(...

    linux下用freetype2显示汉字

    本人在工作实践中写的一个汉字显示程序,在linux平台下,利用frambuffer显示设备来显示。用freetype2库来显示矢量汉字。程序带有汉字对齐、加粗、自动换行等功能。对于freetype2和frambuffer入门很有帮助。本程序...

    freetype2 代码

    freetype2 代码 C++描述,一个helloworld

    Freetype字体引擎分析与指南_freetype_字体_指南_

    很好的freetype字体相关学习资料,网上找了好久,这个资料比较好,一般都收费,这个花了功夫才弄下来的,希望对做freetype字体的朋友有用,我自己也在学习和做这方面的东西。库代码网上有,自己可以下载。

    freetype技术及使用简介

    基于freetype的ttf的介绍和使用,详细介绍了字体引擎的使用方式以及truetype字体文件的内部结构

    使用freetype于opengl显示汉字(g引擎)

    使用freetype于opengl显示汉字 改编的东西 :)

    FreeType2使用资料

    包括freetype-2.5.5源码、freetype使用帮助、ttf文件规范(英文版)等资料。

    Freetype 字体引擎分析与指南

    这份文档提供了FreeType 2函数库设计与实现的细节。本文档的目标是让开发人员更好的理解FreeType 2是如何组织的,并让他们扩充、定制和调试它。 首先,我们先了解这个库的目的,也就是说,为什么会写这个库: * 它让...

    freetype2-testing:测试FreeType的实用程序

    自由类型 FreeType是免费提供的用于渲染字体的软件库。测验该存储库提供FreeType的测试实用程序: :容纳的模糊测试目标,并使用运行测试样本的回归测试套件,以发现已验证和已修复的错误。

    FreeType的简单使用

    一个简单的FreeType绘制文字(中英文)的工程 熟悉FreeType的简单功能

    drawtext-sdl2-freetype2-harfbuzz:使用FreeType2和HarfBuzz在SDL2上绘制文本的示例

    使用FreeType2和HarfBuzz在SDL2上绘制文本的示例。 sdl-ft-1:使用FreeType 2和SDL2的基本文本呈现 sdl-ft-stroke:每个字符带有边框的文本 sdl-ft-outlinerender:使用Outline Render回调来渲染文本,而不是默认...

    freetype2 中文帮助

    freetype2 中文帮助 Freetype 字体引擎分析与指南

    FreeType字体渲染引擎

    FreeType是开源免费的字体渲染引擎,可将Win32下的字体效果变成与Mac相媲美的字体显示效果,遵循网络共享的原则,免除资源分下载,为了让大家好好学习,并附上txt安装说明文件。

    windows平台下,编译好的Freetype库。

    windows平台下动态编译的Freetype库。 vc:直接把lib文件加入链接器 QTCreator:pro文件里写上LIbs+=-L"lib文件所在目录" -lfreetype mingw gcc:同qtcreator

    FreeType字体程序库介绍

    FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的...

    freetype_lib_dll.rar

    因此,FreeType的用户可以灵活地对它进行裁剪,例如我们在使用过程中,仅仅使用 TrueType字体格式的处理,就可以将其他和这个格式无关的代码通过若干宏定义的取消就可以达到裁剪目的,这可以保证最后的二进制代码的...

    Qt使用FreeType字轮廓线动画

    通过Qt 读取 FreeType 字体 轮廓线,然后动画绘制轮廓线字!

Global site tag (gtag.js) - Google Analytics