freetype 函数介绍
不带缓存的FreeType使用
1、 初始化库
FT_Init_FreeType( FT_Library *alibrary );
2、 通过创建一个新的 face 对象来打开一个字体文件
FT_New_Face( FT_Library library,
const char* filepathname,
FT_Long face_index,
FT_Face *aface );
3、 以点或者象素的形式选择一个字符大小
FT_Set_Char_Size( FT_Face face,
FT_F26Dot6 char_width,
FT_F26Dot6 char_height,
FT_UInt horz_resolution,
FT_UInt vert_resolution );
FT_Set_Pixel_Sizes( FT_Face face,
FT_UInt pixel_width,
FT_UInt pixel_height );
4、 装载一个字形(glyph)图像,并把它转换为位图
(1)把一个字符码转换为一个字形索引
FT_Get_Char_Index( FT_Face face,
FT_ULong charcode );
(2)从face中装载一个字形
FT_Load_Glyph( FT_Face face,
FT_UInt glyph_index,
FT_Int32 load_flags );
(3)转换成bitmap位图
FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
FT_Render_Mode render_mode,
FT_Vector* origin,
FT_Bool destroy );
以上1、2步可用以下函数实现,相当于调用FT_Get_Char_Index和FT_Load_Glyph:
FT_Load_Char( FT_Face face,
FT_ULong char_code,
FT_Int32 load_flags );
5、 渲染(可选,斜体、加粗、下划线等)并绘制
FT_Set_Transform( FT_Face face,
FT_Matrix* matrix,
FT_Vector* delta );
// 示例代码
FT_Library pFTLib =NULL;
FT_Face pFTFace = NULL;
FT_Glyph glyph;
FT_UInt glyph_index;
FT_Error error = 0;
error =FT_Init_FreeType(&pFTLib);
if(error)
{
printf("error");
}
error = FT_New_Face(pFTLib,ttf, 0, &pFTFace);
if(error)
{
printf("error");
}
if(0 !=FT_Set_Char_Size(pFTFace, 0, 16<<6, 72, 72))
{
printf("error");
}
glyph_index =FT_Get_Char_Index(pFTFace, *char);
FT_Load_Glyph(pFTFace,glyph_index, FT_LOAD_MONOCHROME | FT_LOAD_RENDER);
error =FT_Get_Glyph(pFTFace->glyph, &glyph);
if(!error)
{
FT_Glyph_To_Bitmap(&glyph,FT_RENDER_MODE_NORMAL, 0, 0);
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph;
FT_Bitmap bitmap = bitmap_glyph->bitmap;
// 把点阵数据(bitmap)绘制到具体的显示设备上去
}
带缓存的FreeType使用
1、初始化库
FT_Init_FreeType( FT_Library *alibrary );
2、创建cache manager
FTC_Manager_New( FT_Library library,
FT_UInt max_faces,
FT_UInt max_sizes,
FT_ULong max_bytes,
FTC_Face_Requester requester,
FT_Pointer req_data,
FTC_Manager *amanager );
3、创建charmap cache
FTC_CMapCache_New( FTC_Manager manager,
FTC_CMapCache *acache );
4、创建cache来存储字形位图数据
FTC_SBitCache_New( FTC_Manager manager,
FTC_SBitCache *acache );
5、使用charmap cache把字符编码转化成字形索引
FTC_CMapCache_Lookup( FTC_CMapCache cache,
FTC_FaceID face_id,
FT_Int cmap_index,
FT_UInt32 char_code );
6、在给定的sbit cache中查找字形位图
FTC_SBitCache_LookupScaler( FTC_SBitCache cache,
FTC_Scaler scaler,
FT_ULong load_flags,
FT_UInt gindex,
FTC_SBit *sbit,
FTC_Node *anode );
// 示例代码
FT_Library pFTLib =NULL;
FT_Face pFTFace = NULL;
FTC_Manager cache_manager= 0;
FTC_CMapCachecmap_cache;
FTC_SBitCachesbit_cache;
FT_UInt glyph_idx;
FTC_ScalerReccurrent_ic;
FTC_Scalerselected_ic;
FTC_SBit bitmap;
FT_Error err = 0;
err =FT_Init_FreeType(&pFTLib);
if(err)
{
printf("error");
}
err = FTC_Manager_New(pFTLib,get_faces_to_allocate(), 0, 0,
fts_face_requester,(FT_Pointer)NULL, &cache_manager);
if (err)
{
printf("error");
}
err =FTC_CMapCache_New(cache_manager, &cmap_cache);
if (err)
{
printf("error");
}
err =FTC_SBitCache_New(cache_manager, &sbit_cache);
if (err)
{
printf("error");
}
glyph_idx =FTC_CMapCache_Lookup(cmap_cache, current_ic.face_id, -1, char[k]);
if (glyph_idx)
{
selected_ic = ¤t_ic;
}
if(FTC_SBitCache_LookupScaler(sbit_cache, selected_ic, FT_LOAD_DEFAULT,
glyph_idx,&bitmap, (FTC_Node*)NULL))
{
printf("error");
}
// 把点阵数据(bitmap)绘制到具体的显示设备上去
freetype 函数介绍相关推荐
- python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍
内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...
- C语言中的scanf()函数介绍
1.scanf函数:读取从键盘输入的数据 在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据 getchar().get ...
- 延时函数介绍和呼吸灯的实现
文章目录 延时函数介绍 呼吸灯原理 杨桃32学习笔记,本文图片文字皆为转述 延时函数介绍 分为delay_s秒,delay_ms毫秒,delay_us微秒延时,最大参数不能超过65535. 呼吸灯原理 ...
- ×××S 2012 参照函数 -- 介绍
×××S 2012 参照函数 -- 介绍 在×××S中,一张报表内可以同时包含多个数据集,但是一个数据区域就仅限于一个数据集,如果希望同时参考多个数据集,查找函数就能轻松办到,其概念类似JOIN是通过 ...
- 【 MATLAB 】rem 函数介绍
rem函数和mod函数很相似,二者认真看一个,另一个看一下区别即可. mod函数介绍:[ MATLAB ]mod 函数介绍 rem Remainder after division Syntax r ...
- 【 MATLAB 】filter 函数介绍 之 Filter Data in Sections
[ MATLAB ]filter 函数介绍(一维数字滤波器) 在上篇博文中,里面有一个例子,就是过滤部分中的数据,这个部分中的数据的意思是如果有一个向量需要过滤,我们可以把它分为几段,然后分段过滤. ...
- swift1.2语言函数和闭包函数介绍
swift1.2语言函数和闭包函数介绍 在编程中,随着处理问题的越来越复杂,代码量飞速增加.其中,大量的代码往往相互重复或者近似重复.如果不采有效方式加以解决,代码将很难维护. swift1.2语言函 ...
- php函数介绍,PHP函数介绍_PHP教程
PHP函数介绍 基本使用: 函数定义形式: function 函数名(形参1,形参2,...) { //函数体(代码块): } 函数调用形式: 本质上就是使用一个名字来达到执行其中函数中的的作用.通常 ...
- Json模块dumps、loads、dump、load函数介绍
转自:http://blog.csdn.net/mr_evanchen/article/details/77879967 Json模块dumps.loads.dump.load函数介绍 1.json. ...
最新文章
- 2021年大数据常用语言Scala(二十二):函数式编程 映射 map
- python sys.argv[] 的作用
- 导入android studio项目,编译失败
- 服务器搭建tomcat,通过url访问视频
- Spark数据倾斜的完美解决
- 硬件:关于CPU超频知识笔记
- PDE双曲型方程数值解形式及例题分析
- 机器学习1.1--模型和代价函数
- v9更新系统后为何显示服务器连接,V9服务器
- LeetCode(62):不同路径
- 20191021:(leetcode习题)乘积小于K的子数组
- 批处理(bat)没有后缀的文件怎么复制?
- php中如何从键盘获取,在javascript中如何获取键盘的keyCode
- OPNET中使用外部文件
- 算法:两种对拼音进行智能切分的方法
- Vue的一些API理解整理,如何一次引入多次调用
- C语言入门基础知识笔记
- ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57,A72
- .NetCore生成海报+二维码(logo)
- 转载:图像抠图算法学习 -Shared Sampling for Real-Time Alpha Matting
热门文章
- Python 之 如何一行输入多个整数
- java jtextarea 监听文本_Java Swing JTextArea文本区域的实现示例
- web网页设计期末课程大作业:红色中国文化主题网站设计——灌篮高手(4页)HTML+CSS
- 浏览器无法连接网络,学校校园网无法跳转到登录页面
- 队列的顺序实现(入队、出队、对长、获取队头元素)
- scrapy爬虫 出现10054错误 远程主机强迫关闭了一个现有的连接
- marshmallow库的简单学习
- 主成分分析(PCA)(principal component analysis)
- 现在有哪些好的国外的云服务器网站(国内可以直接上的那种)?
- 注解-Annotation