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博客


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

相关推荐
少许极端2 分钟前
算法奇妙屋(四十五)-CCPC备战之旅-1
java·开发语言·算法
U盘失踪了8 分钟前
go 常量
开发语言·后端·golang
techdashen8 分钟前
Go 的新垃圾回收器 Green Tea:一个降低GC CPU开销的大工程
开发语言·后端·golang
fpcc10 分钟前
信号处理与AI中的卷积的关系
c++·人工智能·信号处理
Java面试题总结13 分钟前
BCrypt密码加密
开发语言·python
cici1587415 分钟前
C# 五子棋小游戏源码(人机对战)
开发语言·单片机·c#
iiiiyu18 分钟前
面向对象高级接口的综合案例
java·开发语言·数据结构·编程语言
fzil00128 分钟前
让 AI 自己协作 —— 多智能体(Swarm)系统的设计与实现
java·开发语言·人工智能·ubuntu
Mem0rin32 分钟前
[Java/数据结构]二叉树练习题几则
java·开发语言·数据结构
止语Lab33 分钟前
Go 错误分层实战:从裸奔到三层防线
开发语言·golang