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


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

相关推荐
栗子叶17 小时前
Java对象创建的过程
java·开发语言·jvm
Amumu1213817 小时前
React面向组件编程
开发语言·前端·javascript
IT=>小脑虎17 小时前
Python零基础衔接进阶知识点【详解版】
开发语言·人工智能·python
wjs202417 小时前
C 标准库 - `<float.h>》详解
开发语言
zfj32117 小时前
CyclicBarrier、CountDownLatch、Semaphore 各自的作用和用法区别
java·开发语言·countdownlatch·semaphore·cyclicbarrier
张np17 小时前
java基础-ConcurrentHashMap
java·开发语言
早日退休!!!17 小时前
进程与线程的上下文加载_保存及内存映射
开发语言
jllllyuz17 小时前
MATLAB实现蜻蜓优化算法
开发语言·算法·matlab
冰暮流星17 小时前
javascript逻辑运算符
开发语言·javascript·ecmascript
flysh0517 小时前
如何利用 C# 内置的 Action 和 Func 委托
开发语言·c#