C++字体库开发之字体回退三

代码片段

class FontCoverage

{

public:

using SP = std::shared_ptr<FontCoverage>;

virtual ~FontCoverage() = default;

virtual void set(int index, FontTypes::CoverageLevel level) = 0;

virtual FontTypes::CoverageLevel get(int index) = 0;

virtual FontCoverage::SP clone() = 0;

};

freetype:

FTCoverage::SP coverage = std::make_shared<FTCoverage>();

FT_CharMap *charMap = (*m_face)->charmaps;

for (int i = 0; i < (*m_face)->num_charmaps; i++) {

FT_Select_Charmap((*m_face), charMap[i]->encoding);

FT_UInt gIndex;

for (auto charCode = FT_Get_First_Char((*m_face), &gIndex); gIndex != 0;

charCode = FT_Get_Next_Char((*m_face), charCode, &gIndex)) {

coverage->set(charCode, FontTypes::CoverageLevel::COVERAGE_EXACT);

}

}

harfbuzz:

FontCoverage::SP coverage = std::make_shared<HBCoverage>();

hb_set_t *chars = hb_set_create();

hb_codepoint_t ch = HB_SET_VALUE_INVALID;

hb_face_collect_unicodes(m_face, chars);

while (hb_set_next(chars, &ch))

coverage->set(ch, FontTypes::CoverageLevel::COVERAGE_EXACT);

hb_set_destroy(chars);

关键点

1.字体解析需包含完整的unicode范围

2.根据unicode,字体名,大小等最优匹配得到回退列表

C++字体库开发二-CSDN博客


创作不易,小小的支持一下吧!

相关推荐
Evand J11 分钟前
MATLAB绘图函数介绍:plotmatrix绘图,附MATLAB例子
开发语言·matlab·绘图
比特 GOK14 分钟前
Qt项目ui文件中新添加的控件在代码中不识别的问题解决
开发语言·qt·ui
云天AI实战派18 分钟前
Agent 全流程实战:用 Python 搭建技能路由智能体,落地小龙虾门店运营助手
开发语言·人工智能·python
楼田莉子24 分钟前
仿Muduo的高并发服务器:LoopThread模块及其ThreadPool模块
linux·服务器·c++·后端·学习
rit843249928 分钟前
基于遗传算法的电动汽车充电站选址优化:模型与MATLAB实现
开发语言·matlab
Rust研习社31 分钟前
你为什么总是入门 Rust 失败
开发语言·后端·rust
我滴老baby1 小时前
工具调用全景解析从Function Calling到MCP协议的完整实践
开发语言·人工智能·python·架构·fastapi
小李子呢02111 小时前
前端八股JS---Map / Set / WeakMap / WeakSet
开发语言·前端·javascript
feifeigo1231 小时前
自适应大邻域搜索(ALNS)算法的MATLAB 实现
开发语言·算法·matlab
盐焗鹌鹑蛋1 小时前
【C++】模板进阶
c++