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


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

相关推荐
ChoSeitaku15 分钟前
12.重复内容去重|添加日志|部署服务到Linux上(C++)
linux·c++·windows
挣扎与觉醒中的技术人20 分钟前
网络安全入门持续学习与进阶路径(一)
网络·c++·学习·程序人生·安全·web安全
滴_咕噜咕噜22 分钟前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
martian66522 分钟前
【Java高级篇】——第16篇:高性能Java应用优化与调优
java·开发语言·jvm
OTWOL1 小时前
【C++编程入门基础(一)】
c++·算法
许苑向上1 小时前
Java八股文(下)
java·开发语言
菜鸟一枚在这1 小时前
深入解析设计模式之单例模式
开发语言·javascript·单例模式
独孤求败Ace1 小时前
第44天:Web开发-JavaEE应用&反射机制&类加载器&利用链&成员变量&构造方法&抽象方法
java·开发语言
计算机-秋大田1 小时前
基于Spring Boot的农产品智慧物流系统设计与实现(LW+源码+讲解)
java·开发语言·spring boot·后端·spring·课程设计
matlabgoodboy2 小时前
Matlab代编电气仿真电力电子电机控制自动化新能源微电网储能能量
开发语言·matlab·自动化