爱笑的姑娘|使用 freetype 显示单个文字
来源:百问网
作者:韦东山
本文字数:5290 , 阅读时长:7分钟
使用 GIT 下载所有源码后 , 本节源码位于如下目录:
01_all_series_quickstart\
【爱笑的姑娘|使用 freetype 显示单个文字】04_嵌入式 Linux 应用开发基础知识\source\10_freetype\
01_wchar\test_wchar.c
02_freetype_show_font\freetype_show_font.c
03_freetype_show_font_angle\freetype_show_font_angle.c
1、矢量字体引入使用点阵字库显示英文字母、汉字时 , 大小固定 , 如果放大缩小则会模糊甚至有锯齿出现 , 为了解决这
个问题 , 引用矢量字体 。
矢量字体形成分三步:
① 确定关键点 ,
② 使用数学曲线(贝塞尔曲线)连接头键点 ,
③ 填充闭合区线内部空间 。
什么是关键点?以字母“A”为例 , 它的的关键点如下图中的黄色所示 。
再用数学曲线(比如贝塞尔曲线)将关键点都连接起来 , 得到一系列的封闭的曲线 , 如下图所示:
最后把封闭空间填满颜色 , 就显示出一个 A 字母 , 如下图所示:
如果需要放大或者缩小字体 , 关键点的相对位置是不变的 , 只要数学曲线平滑 , 字体就不会变形 。
2、Freetype 介绍Freetype 是开源的字体引擎库 , 它提供统一的接口来访问多种字体格式文件 , 从而实现矢量字体显示 。 我们只需要移植这个字体引擎 , 调用对应的 API 接口 , 提供字体文件 , 就可以让 freetype 库帮我们取出关键点、实现闭合曲线 , 填充颜色 , 达到显示矢量字体的目的 。
关键点(glyph)存在字体文件中 , Windows 使用的字体文件在 c:\Windows\Fonts 目录下 , 扩展名为 TTF的都是矢量字库 , 本次使用实验使用的是新宋字体 simsun.ttc 。
给定一个字符 , 怎么在字体文件中找到它的关键点?
首先要确定该字符的编码值:比如 ASCII 码、GB2312 码、UNICODE 码 。 如果字体文件支持某种编码格式(charset) , 就可以使用这类编码值去找到该字符的关键点(glyph) 。 有些字体文件支持多种编码格式(charset) , 这在文件中被称为 charmaps(注意:这个单词是复数 , 意味着可能支持多种 charset) 。
以 simsun.ttc 为值 , 该字体文件的格如下:头部含有 charmaps , 可以使用某种编码值去 charmaps 中找到它对应的关键点 。 下图中的“A、B、中、国、韦”等只是 glyph 的示意图 , 表示关键点 。
Charmaps 表示字符映射表 , 字体文件可能支持哪一些编码 , GB2312、UNICODE、BIG5 或其他 。 如果字体文件支持该编码 , 使用编码值通过 charmap 就可以找到对应的 glyph , 一般而言都支持 UNICODE 码 。
有了以上基础 , 一个文字的显示过程可以概括如下:
① 给定一个字符可以确定它的编码值(ASCII、UNICODE、GB2312);
② 设置字体大小;
推荐阅读
- 东方网综合|又一大牌扛不住了!关店3000家,裁员6000人!很多姑娘都爱买
- 美食工坊|而有一个很唯美的名字,日本仍保留使用,古代的苹果不叫“苹果”
- 航天器|中国可重复使用航天器刚发射成功,美媒就来乱弹琴:或是太空武器
- 深夜的微微|逗比姑娘不怕多,就怕他们凑一窝!,搞笑GIF趣图说实话
- 钱江晚报|小区保安突发疾病,刚上完夜班的白衣小姑娘跪地急救,累到虚脱
- 皮肤|CSGO:最贵皮肤无一入选?这几款手感满分,更适合USP使用
- 军事|外媒关注中国发射“可重复使用试验航天器”:保密程度高于常规
- 医保基金|山东通报16起医保基金违规使用或欺诈骗保典型案例 涉违规收费等问题
- 央视新闻客户端|支持世界田联反兴奋剂新计划 肯尼亚拟定使用兴奋剂违法
- 客货运输|中国民航局拟批准东方航空独资筹建一二三航空 使用ARJ21-700飞机
